ld 和 ld.so命令
参考:
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来搜索需要的动态库。搜索路径的顺序为:
编译目标代码时指定的动态库搜索路径(-L指定的);
环境变量LIBRARY_PATH指定的动态库搜索路径;
默认动态库搜索路径/lib/
默认动态库搜索路径/usr/lib/
在使用gcc编译时,gcc将调用ld,将搜索路径传给ld,让ld来链接文件。因此上述搜索路径实际上是gcc的搜索路径,而不是ld的搜索路径。
运行
ld.so负责在运行的时候搜索要链接的动态库,发生在run-time
时期。搜索路径为:
可执行文件中动态段DT_PATH指定;该动态段包含的路径,来自于在编译时,gcc加入连接参数“-Wl,-rpath”指定动态库搜索路径,多个路径之间用冒号分隔;例如
gcc -Wl,--rpath -Wl,${LIB_DIR1} ./app
。环境变量LD_LIBRARY_PATH指定路径;
/etc/ld.so.cache中缓存的动态库路径。通过配置文件/etc/ld.so.conf增删路径(修改后需要运行ldconfig命令)。
/etc/ld/so.conf第一行有个引用命令:include ld.so.conf.d/*.conf;因此最优雅的方式是在ld.so.conf.d目录下创建一个自己的程序依赖的配置文件,配置文件内容为程序依赖的动态库路径,一个路径一行;最后ldconfig更新配置文件;
/lib/
/usr/lib/
注:当elf 可执行程序运行时,会在LD_LIBRARY_PATH 动态库的查找路径 查找,当找到A库时加载,如果其他的文件中存在相同的库函数,若两个库函数不一致,则有可能导致出现undefined symbol。
解决办法: 排查LD_LIBRARY_PATH 的值下的文件中是否存在相同的库文件。
ld 和 ld.so命令相关推荐
- Linux / ld 和 ld.so 命令的区别
一.说明 ld 链接器,它的生命周期是发生在 compile-time 的,它的一些参数是编译时期 gcc 给传递的.比如,指定需要链接什么库. ld.so 的周期是发生在 run-time 的,名字 ...
- iOS NSInteger 的输出 %d %ld %zd %ld (long)
NSInteger 输出类型 %zd 转载于:https://www.cnblogs.com/xujiahui/p/10065661.html
- 解读链接脚本ld和案例分享
链接脚本ld ld(Linker)是一个负责将目标文件和库文件链接成可执行文件或共享库的程序.在编译过程中,编译器将源代码编译成目标文件,然后ld将这些目标文件链接成可执行文件或共享库. ld的主要作 ...
- LD 文件:规则详解
LD 文件:规则详解 概论 基本概念 脚本格式 简单例子 简单脚本命令 对符号的赋值 SECTIONS命令 MEMORY命令 PHDRS命令 VERSION命令 脚本内的表达式 暗含的连接脚本 1. ...
- glibc: ld.so;ld; LD_LIBRARY_PATH; rpath-link
文章目录 参考 ld.so 的作用 依赖库的搜索顺序 文件介绍 /etc/ld.so.cache /etc/ld.so.preload lib*.so* shared objects 硬件兼容库 x8 ...
- ld 脚本浅析-LD手册粗糙翻译
本文乃转载, 我在其基础上做了少量修改. 原作者的E-mail是zhanglei@sict.ac.cn. 完成于2005.11.5-2005.11.8 0. Contents 1. 概论 2. 基本概 ...
- CVPR 2022 | 南开程明明团队和天大提出LD:目标检测的定位蒸馏
作者:Jin.Carlo | 已授权转载(源:知乎)编辑:CVer https://zhuanlan.zhihu.com/p/474955539 先上我们文章和代码: Localization D ...
- linux 获取so基址,ld.so分析5 _dl_start
ld.so分析5 _dl_start 对于不关心的地方,我们都//或/**/注释掉 1._dl_start中的变量声明 static Elf32_Addr //我们假设是i386 32位平台,ElfW ...
- 编译低版本的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 ...
最新文章
- win8iis和php,Win8下IIS装PHP扩展
- what you should do when you are alone
- List转数组toArray方法
- android 按钮按下缩放,android捏缩放
- C++:两种类实例化
- Linux命令行下抓取HTTP流量的工具--httpry
- arp协议的主要功能是_计算机网络之ARP协议
- 数据库与Excel表格链接PHP,php读取Excel表格(Excel也可以做数据库)调用phpExcel类库...
- oracle工程师考试题,信息安全工程师考试练习试题及答案(三)
- Neo4j下载和安装
- JAVA动态申请数组
- 山海经异兽录服务器找不到了,山海经异兽录上古区
- 3D游戏:三、空间与运动
- #深入理解# 机器学习中误差和残差的区别
- 对小样本数据进行数据增强
- Dynamics CRM REST Builder
- 准备移民澳洲的你,为何改移加拿大?
- 一个人越想赚钱,就越要改掉这3个习惯,否则注定穷一辈子
- 十一五”核高基“陷入迷途,出路何在?
- 脱贫摘帽攻关年,“拼多多们”扎进三农