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 ...
最新文章
- 创业人永远不要让工作成为自己的负担
- 构建复杂的应用程序(二)—— visual studio 下 C/C++ 项目开发
- NoSQL精粹pdf
- 学会python爬虫能发财么_python如何赚钱? python爬虫如何进阶? python就业? 如何快速入门python?...
- 关于IE6,7下面的一些兼容性问题
- Mac新手教程:Adobe Illustrator 如何创建文件
- c# 导入PKCS1和PKCS8密钥
- 基于Go调用国密SM2算法
- linux7配置ftp服务,RedHat 7配置FTP服务
- Codesys和基恩士扫码枪Ethernet/IP通信
- 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323
- 【转1】 OpenWrt Chaos Calmer 15.05使用mwan3单线多拨教程
- JScript 06 根据成绩平均分划分等级
- 欧科云链链上卫士:做穿越Web3黑暗森林的那盏探照灯
- 华为OD机试真题 Python 实现【开放日活动】【100%通过率】【2022.11 Q4 新题】
- 红帽8RHCSA考试真题,今天300分已过(2022最新版)
- 华为鸿蒙概念机,华为Mate50Pro概念机,屏下镜头+一亿像素+麒麟9010,你喜欢吗?...
- Windows7 MSDN原版ISO镜像
- 基于FME的水库功能分区生态红线批量处理方案(从文本到gdb)
- 在微软工作是怎样一番体验