1.动态库静态库的生成

编译生成静态库步骤:

第一步,生成目标文件。

  gcc -c test.c

第二步,把目标文件归档。

  ar r libtest.a test.o

  file libtest.a

编译生成动态库步骤:

gcc demo.c -fPIC -shared -o libtest.so

由以上命令生成动态库libtest.so,为了不需要动态加载动态库,在命令时需以lib开头以.so为后缀。

–fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

–shared:指明编译成动态库。

2.动态库静态库的链接

编译链接静态库

gcc demo.c -ltest -L. -static -o demo

编译链接动态库

gcc test.c –L . –ltest –o test

-L:指明动态库所在的目录

-l:指明动态库的名称,该名称是处在头lib和后缀.so中的名称,如上动态库libtest.so的l参数为-l test。

-ltest -L./lib 指定链接库路径

-wl,-rpath /home/Tim/demo/lib 指定搜索链接库路径

-wl,-Bstatic 后面的-l使用静态库链接

-wl,-Bdynamic 后面的-l使用动态库连接

显式加载与隐式加载

显式加载通过编译是链接符号表,运行时由系统搜索加载动态库

隐式加载通过程序运行时调用下面几个系统调用手动加载动态库

dlopen 用于库的打开
dlerror 用于错误检测
dlsym 用于获取库中函数指针
dlclose 关闭动态库,手动加载动态库

3.动态库静态库的加载

ldd test 查看执行程序的动态库依赖

nm libtest.so 查看动态库的符号

strings libtest.so 查看动态库中字符串

strip libtest.so 脱去动态库中符号信息

sudo lsof -p pid 查看运行进程的动态库依赖

env 查看当前shell用户环境变量

sudo env 查看切换sudo环境变量

export ld_library_path 配置动态库路径

pkg-config 配置搜索动态库路径命令

vi /etc/profile 配置环境变量到系统配置文件

source /etc/profile 使系统配置文件立即生效

vi ld.so.conf 查看系统动态库共享目录配置

sudo ldconfig 使系统动态库共享目录生效

sudo visudo 修改执行sudo切换时保留当前用户shell环境

sudo cat /etc/sudoers

Defaults        env_keep+="ld_library_path"

4.参考资料

http://man.linuxde.net/ldconfig

http://blog.chinaunix.net/uid-24641004-id-5028821.html

https://www.cnblogs.com/zhangsir6/articles/2956798.html

c++构建工具之make使用小结相关推荐

  1. c++构建工具之cmake使用小结

    0.前言 使用cmake的过程先是要编写一个cmakelists.txt的文本,然后使用cmake命令生成对应平台的工程. 在windows下命令行或者使用cmake gui工具,生成vs工程,然后使 ...

  2. fis3前端工程构建工具使用小结

    使用百度前端工程构建工具FIS3经验整理 工具集介绍地址:http://fis.baidu.com/fis3/index.html 1.安装fis3环境1.1 安装nodejs环境1.2 安装fis3 ...

  3. 使用 TypeScript 改造构建工具及测试用例

    最近的一段时间一直在搞TypeScript,一个巨硬出品.赋予JavaScript语言静态类型和编译的语言. 第一个完全使用TypeScript重构的纯Node.js项目已经上线并稳定运行了. 第二个 ...

  4. 前端开发者常用的构建工具

    随着前端工程师需要维护的代码变得越来越庞大和复杂,代码的维护.打包.发布等流程也变得极为繁琐,人为的错误也随着流程的增加而增加了更多的出错率.所以每一个团队都希望有一种工具,能帮助整个团队在开发中能精 ...

  5. qbs java_Qt构建工具QBS之零 —— QBS 概览

    本系列文章起因 自己非常喜欢 QT 这个框架, 使用 QT 这几年, IDE 一直是使用的 QT 自带的 Qt Creator, 这个 IDE 本身比较轻巧, 同事相关的语法提示之类的也算够用, 但是 ...

  6. linux java 构建工具有哪些,Linux ant --强大的Java开发构建工具

    用途说明 ant严格说来,ant其实并非原生的Linux命令,但它是一个使用广泛.功能强大的跨平台构建工具程序,尤其是进行Java开发时,许多开源的Java项目都使用ant作为构建工具.ant命令一般 ...

  7. scala构建工具sbt使用介绍

    sbt工具下载及说明: https://www.scala-sbt.org/0.13/docs/zh-cn/Installing-sbt-on-Windows.html sbt是交互式构建工具,使用s ...

  8. iOS应用模块化的思考及落地方案(二)模块化自动构建工具的使用

    1.0 iOS模块化中的问题 前文已经介绍了模块化的流程及一些常见的问题,我们在这里再次总结一下. 在工作中,当我们开始一个新项目的时候,最先考虑的就是模块化工作. 模块化工作的想法是很美好的,可是执 ...

  9. Maven官宣:干掉Maven和Gradle!推出更强更快更牛逼的新一代构建工具,炸裂!

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:网络 相信作为Java开发者的你早已经受够了maven的编译缓慢,但是又由于历史包袱.使用习惯等问题暂时切换不了其他更快的构建 ...

最新文章

  1. js tool 方法之删除数组指定项
  2. 如何解决 React 官方脚手架不支持 Less 的问题
  3. 热门事件和书籍中资料管理中国
  4. 13.性能之巅 洞悉系统、企业与云计算 --- 案例研究
  5. LINUX下用C判断一个进程是否活着
  6. PDF附加字体和不附加字体
  7. VMware Error | IP地址经常变更
  8. Cant open /dev/sdb1exclusively.Mounted filesystem
  9. 如何在word中同一位置处插入多篇连续文献
  10. 深入剖析线程同步工具CountDownLatch原理
  11. rand()和rand_r()的区别
  12. 细菌实验分组(C程序设计进阶第2周)
  13. usc week 5 计算几何(包含凸包) 队内练习题
  14. 用互联网思维去做事之-(2)用户思维
  15. python中怎么计数_python怎么计数
  16. Vue 实现页面一键截屏功能
  17. 美学心得(第二百一十七集) 罗国正 (2020年12月)
  18. POJ 2924 Gauß in Elementary School(水~)
  19. 9个好用的生命科学研究工具分享
  20. 如何用蓝牙实现无线定位(二)--信号塔设置

热门文章

  1. android bitmap 占用内存大小,drawable与bitmap内存占用大小
  2. 百度搜索结果 转换_如何让图片出现在百度搜索结果里出现?
  3. 《漫画算法2》源码整理-3 二分查找 跳跃表
  4. Spring(5)——Spring 和数据库编程
  5. 自己动手实现的 Spring IOC 和 AOP - 上篇
  6. 谷歌chrome浏览器的源码分析(三)
  7. Python安装第三方包package
  8. 浅谈线程池(中):独立线程池的作用及IO线程池
  9. Machine Learning week 4 quiz: Neural Networks: Representation
  10. 虚拟现实大会ChinaVR2015报告之-From Visual Content to Virtual Reality Data-driven Intelligence Production