参考:
1.What’s the different between -L/libpath and /etc/ld.so.conf configure the libpath that compiling in gcc/g++
2.Where do executables look for shared objects at runtime?
3.Library HOWTO(官方说明)
4.Linux上ld和ld.so命令的区别
5.知乎 gcc编译过程、gcc命令参数、静态库和动态库搜索路径

ld 和 ld.so 命令是什么

ld链接器,它的生命周期是发生在compile-time的,它的一些参数是编译时期gcc给传递的,比如,指定需要链接什么库。

ld.so命令的周期是发生在run-time的,名字叫动态链接器/加载器。它的作用体现在运行时。比如你链接了指定的库,它运行的时候会根据指定的路径去加载指定的库。

编译

编译和运行搜索动态库的时候,是分开的,由不同的指令来搜索需要的动态库。在编译时,由ld来搜索需要的动态库。搜索路径的顺序为:

  1. 编译目标代码时指定的动态库搜索路径(-L指定的);

  2. 环境变量LIBRARY_PATH指定的动态库搜索路径;

  3. 默认动态库搜索路径/lib/

  4. 默认动态库搜索路径/usr/lib/

在使用gcc编译时,gcc将调用ld,将搜索路径传给ld,让ld来链接文件。因此上述搜索路径实际上是gcc的搜索路径,而不是ld的搜索路径。

运行

ld.so负责在运行的时候搜索要链接的动态库,发生在run-time时期。搜索路径为:

  1. 可执行文件中动态段DT_PATH指定;该动态段包含的路径,来自于在编译时,gcc加入连接参数“-Wl,-rpath”指定动态库搜索路径,多个路径之间用冒号分隔;例如gcc -Wl,--rpath -Wl,${LIB_DIR1} ./app

  2. 环境变量LD_LIBRARY_PATH指定路径;

  3. /etc/ld.so.cache中缓存的动态库路径。通过配置文件/etc/ld.so.conf增删路径(修改后需要运行ldconfig命令)。

    /etc/ld/so.conf第一行有个引用命令:include ld.so.conf.d/*.conf;因此最优雅的方式是在ld.so.conf.d目录下创建一个自己的程序依赖的配置文件,配置文件内容为程序依赖的动态库路径,一个路径一行;最后ldconfig更新配置文件;

  4. /lib/

  5. /usr/lib/

注:当elf 可执行程序运行时,会在LD_LIBRARY_PATH 动态库的查找路径 查找,当找到A库时加载,如果其他的文件中存在相同的库函数,若两个库函数不一致,则有可能导致出现undefined symbol。
解决办法: 排查LD_LIBRARY_PATH 的值下的文件中是否存在相同的库文件。

ld 和 ld.so命令相关推荐

  1. Linux / ld 和 ld.so 命令的区别

    一.说明 ld 链接器,它的生命周期是发生在 compile-time 的,它的一些参数是编译时期 gcc 给传递的.比如,指定需要链接什么库. ld.so 的周期是发生在 run-time 的,名字 ...

  2. iOS NSInteger 的输出 %d %ld %zd %ld (long)

    NSInteger 输出类型 %zd 转载于:https://www.cnblogs.com/xujiahui/p/10065661.html

  3. 解读链接脚本ld和案例分享

    链接脚本ld ld(Linker)是一个负责将目标文件和库文件链接成可执行文件或共享库的程序.在编译过程中,编译器将源代码编译成目标文件,然后ld将这些目标文件链接成可执行文件或共享库. ld的主要作 ...

  4. LD 文件:规则详解

    LD 文件:规则详解 概论 基本概念 脚本格式 简单例子 简单脚本命令 对符号的赋值 SECTIONS命令 MEMORY命令 PHDRS命令 VERSION命令 脚本内的表达式 暗含的连接脚本 1. ...

  5. glibc: ld.so;ld; LD_LIBRARY_PATH; rpath-link

    文章目录 参考 ld.so 的作用 依赖库的搜索顺序 文件介绍 /etc/ld.so.cache /etc/ld.so.preload lib*.so* shared objects 硬件兼容库 x8 ...

  6. ld 脚本浅析-LD手册粗糙翻译

    本文乃转载, 我在其基础上做了少量修改. 原作者的E-mail是zhanglei@sict.ac.cn. 完成于2005.11.5-2005.11.8 0. Contents 1. 概论 2. 基本概 ...

  7. CVPR 2022 | 南开程明明团队和天大提出LD:目标检测的定位蒸馏

    作者:Jin.Carlo  |  已授权转载(源:知乎)编辑:CVer https://zhuanlan.zhihu.com/p/474955539 先上我们文章和代码: Localization D ...

  8. linux 获取so基址,ld.so分析5 _dl_start

    ld.so分析5 _dl_start 对于不关心的地方,我们都//或/**/注释掉 1._dl_start中的变量声明 static Elf32_Addr //我们假设是i386 32位平台,ElfW ...

  9. 编译低版本的binutils-2.16.1错误:ld.texinfo:1592: @itemx must follow @item

    环境: 宿主机:windows 10,64位 cygwin 64 , 2022 单独编译binutils-2.16.1 问题: ld.texinfo:1592: @itemx must follow ...

最新文章

  1. win8iis和php,Win8下IIS装PHP扩展
  2. what you should do when you are alone
  3. List转数组toArray方法
  4. android 按钮按下缩放,android捏缩放
  5. C++:两种类实例化
  6. Linux命令行下抓取HTTP流量的工具--httpry
  7. arp协议的主要功能是_计算机网络之ARP协议
  8. 数据库与Excel表格链接PHP,php读取Excel表格(Excel也可以做数据库)调用phpExcel类库...
  9. oracle工程师考试题,信息安全工程师考试练习试题及答案(三)
  10. Neo4j下载和安装
  11. JAVA动态申请数组
  12. 山海经异兽录服务器找不到了,山海经异兽录上古区
  13. 3D游戏:三、空间与运动
  14. #深入理解# 机器学习中误差和残差的区别
  15. 对小样本数据进行数据增强
  16. Dynamics CRM REST Builder
  17. 准备移民澳洲的你,为何改移加拿大?
  18. 一个人越想赚钱,就越要改掉这3个习惯,否则注定穷一辈子
  19. 十一五”核高基“陷入迷途,出路何在?
  20. 脱贫摘帽攻关年,“拼多多们”扎进三农

热门文章

  1. Android底层隐私数据,100%安卓APP都在获取用户隐私,网络隐私进入深入区
  2. 功能最强大的屏幕截图屏幕录制:Snagit
  3. 给ssh服务添加fail2ban安全认证
  4. java核心技术卷一、二---------免费、永久有效!
  5. 数据:施之以善报之以成 施之以恶报之以败
  6. 胖虎算法初练七之——跳跃游戏
  7. C语言数字图像处理---1.4直方图拉伸和直方图均衡化
  8. OpenCL 通用编程与优化(15)
  9. 既然Vue通过数据劫持可以精准探测数据变化,为什么还需要虚拟DOM进行diff检测差异?
  10. Android scrollview监听滑动状态