当前位置: 首页 > article >正文

linux下使用vscode编译及引用动态链接库

1.动态链接库的生成

/****tasks.json*********/
{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/lib/libcommon.so",
                "-std=c++11",
                "-fPIC",
                "-shared"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

在tasks.json中,动态链接库名称必须加lib,如libcommon.so,参数加-fPIC(可选),-shared(必选)。编译即可生成libcommon.so。

2.动态链接库的引用

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",               
                "${file}",
                "SocketHelper.cpp",
                "-o",               
                "${fileDirname}/${fileBasenameNoExtension}",
                "-I","${fileDirname}/CommonFunc",
                "-L","${fileDirname}/CommonFunc/lib",
                "-l","common",
                "-Wl,-rpath=${fileDirname}/CommonFunc/lib",
                "-std=c++11",
                "-pthread"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

"-I":动态链接库的头文件所在目录;(大写i)

"-L":动态链接库文件所在目录;

"-l":动态链接库名(小写l);

"rpath":程序运行时,优先到rpath指定的目录去寻找依赖库; 程序链接时,在指定的目录中,隐式的链接那些动态库所需要的链接库。

特别注意"-Wl,rpath=xx",在运行调试时程序不会找"-L"参数目录下的链接库,会报错error while loading shared libraries: lib*.so: cannot open shared object file: No such file or directory。


http://www.kler.cn/a/406436.html

相关文章:

  • 分享一下arr的意义(c基础)(必看)(牢记)
  • Qt 实现网络数据报文大小端数据的收发
  • Android opencv使用Core.hconcat 进行图像拼接
  • VSCode快速生成vue组件模版
  • 【虚幻引擎】UE5数字人开发实战教程
  • Kafka 生产者优化与数据处理经验
  • 基于迅为RK3568开发板全国产平台,快速实现APP开机自启动技术分享
  • 什么是ARM
  • Django如何配置多个环境的MySQL数据库
  • (微信小程序)基于Spring Boot的校园失物招领平台的设计与实现(vue3+uniapp+mysql)
  • MongoDB 更新集合名
  • 【鸿蒙】实现新闻上下轮播滚动效果-harmonyos
  • 自动驾驶车载SoC设计功能安全
  • 微软发布Win11 24H2系统11月可选更新KB5046740!
  • centos 服务器 docker 使用代理
  • 论文阅读:SIMBA: single-cell embedding along with features
  • el-table表头前几列固定,后面几列根据接口返回的值不同展示不同
  • 从复合字符串中分割并解析多个JSON字符串
  • VR虚拟现实技术的应用领域有哪些?
  • 长文解读:OSAID 1.0,全球首个开源AI标准,审视探讨其对AI行业实践开源的影响
  • React 表单Form 中的 useWatch
  • 《Vue零基础教程》(3)创建第一个应用案例
  • java使用itext生成pdf
  • shell--第一次作业
  • 微信小程序组件详解:text 和 rich-text 组件的基本用法
  • 定长滑动窗口基础模板题:LeetCode——2379.得到K个黑块的最少涂色次数和643.子数组最大平均数 1