linux中动态库的编译和加载的查找顺序
来源:互联网 发布:短信端口号查询 编辑:程序博客网 时间:2024/05/24 16:16
Glibc安装的库中有一个名为ld-Linux.so.X其中X为一个数字(版本),
在不同的平台上可以通过ldd查看
$ldd /bin/cat
linux-vdso.so.1 => (0x00007fff9176f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f16424d4000)
/lib64/ld-linux-x86-64.so.2 (0x00005592863c5000)
其中linux-vdso.so.1不是一个实际的库文件,它是一个虚拟库文件用来
和kernel交互。
ld-linux-x86_64.so.2是专门用来负责寻找库文件的库。以cat为例,cat
首先告诉ld-linux-x86_64.so.2它需要libc.so.6这个库文件,ld-linux-x86_64.so
将按照一定的顺序来查找libc.so.6,再给cat进行调用。
===========================================================
问题1:ld-linux-x86_64.so.2这个库是如何被找到的?
ld-linux-x86_64.so.2这个库的位置是通过gcc编译器写死在里面的。gcc写到程序中
ld-linux-x86_64.so.2的位置是可以改变的,通过gcc的spec文件。
============================================================
运行时,ld-linux.so查找共享库的顺序
1.ld-linux.so在可执行的目标中被指定,可以通过readelf命令查看。
2.ld-linux.so缺省在/usr/lib和lib中搜索,当glibc安装到/usr/local中时,
它查找/usr/local/lib
3.LD_LIBRARY_PATH 环境变量中设定的路径
4./etc/ld.so.conf (或/usr/local/etc/ld.so.conf)中所指定的路径,
由ldconfig生成的二进制ld.so.cache中。
============================================================
编译时,ld-linux.so查找共享库的顺序
1.ld-linux.so由gcc的spec文件所指定
2.gcc --print-search-dirs所打印的路径,主要是libgcc_s.so等库
3.LIBRARY_PATH环境变量所设定的路径,或编译的命令行中指定 -L/usr/local/lib
4.binutils中的ld所设定的缺省搜索路径顺序,编译binutils时指定
可以通过 `ld --verbose | grep SEARCH` 来查看
ld --verbose | grep SEARCH | awk 'BEGIN{RS="; "} { print $0;}'
可以按照行来查看记录
5.二进制程序的搜索路径顺序为PATH环境变量中所设定,一般/usr/local/bin高于/usr/bin
6.编译的头文件的搜索路径顺序与library的查找顺序类似,一般/usr/local/include高于/usr/include
在不同的平台上可以通过ldd查看
$ldd /bin/cat
linux-vdso.so.1 => (0x00007fff9176f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f16424d4000)
/lib64/ld-linux-x86-64.so.2 (0x00005592863c5000)
其中linux-vdso.so.1不是一个实际的库文件,它是一个虚拟库文件用来
和kernel交互。
ld-linux-x86_64.so.2是专门用来负责寻找库文件的库。以cat为例,cat
首先告诉ld-linux-x86_64.so.2它需要libc.so.6这个库文件,ld-linux-x86_64.so
将按照一定的顺序来查找libc.so.6,再给cat进行调用。
===========================================================
问题1:ld-linux-x86_64.so.2这个库是如何被找到的?
ld-linux-x86_64.so.2这个库的位置是通过gcc编译器写死在里面的。gcc写到程序中
ld-linux-x86_64.so.2的位置是可以改变的,通过gcc的spec文件。
============================================================
运行时,ld-linux.so查找共享库的顺序
1.ld-linux.so在可执行的目标中被指定,可以通过readelf命令查看。
2.ld-linux.so缺省在/usr/lib和lib中搜索,当glibc安装到/usr/local中时,
它查找/usr/local/lib
3.LD_LIBRARY_PATH 环境变量中设定的路径
4./etc/ld.so.conf (或/usr/local/etc/ld.so.conf)中所指定的路径,
由ldconfig生成的二进制ld.so.cache中。
============================================================
编译时,ld-linux.so查找共享库的顺序
1.ld-linux.so由gcc的spec文件所指定
2.gcc --print-search-dirs所打印的路径,主要是libgcc_s.so等库
3.LIBRARY_PATH环境变量所设定的路径,或编译的命令行中指定 -L/usr/local/lib
4.binutils中的ld所设定的缺省搜索路径顺序,编译binutils时指定
可以通过 `ld --verbose | grep SEARCH` 来查看
ld --verbose | grep SEARCH | awk 'BEGIN{RS="; "} { print $0;}'
可以按照行来查看记录
5.二进制程序的搜索路径顺序为PATH环境变量中所设定,一般/usr/local/bin高于/usr/bin
6.编译的头文件的搜索路径顺序与library的查找顺序类似,一般/usr/local/include高于/usr/include
阅读全文
0 0
- linux中动态库的编译和加载的查找顺序
- linux动态库的查找顺序
- linux动态链接库的加载顺序:
- 关于 动态库的编译和加载
- linux动态库与静态库的编译与加载
- linux动态库与静态库的编译与加载
- linux驱动的动态加载和编译内核的方式加载
- linux中动态加载动态库的方法
- linux中动态加载动态库的方法
- linux中动态加载动态库的方法
- linux中动态链接库的搜索顺序
- linux中动态链接库的搜索顺序
- Linux下共享库的查找顺序
- linux下一般程序运行时查找动态库的顺序
- linux下一般程序运行时查找动态库的顺序
- linux下一般程序运行时查找动态库的顺序
- linux下一般程序运行时查找动态库的顺序
- linux下一般程序运行时查找动态库的顺序
- EL表达式方法的使用
- Android使用WebView实现图片点击的监听
- Shopping Offers
- sql学习记录
- fdisk入门
- linux中动态库的编译和加载的查找顺序
- mybatis insert多级List级联类 之(批量插入返回主键集合)使用《示例》下
- eclipse 和 交叉工具链构建嵌入式应用编译及调试环境
- JavaScript权威指南(第6版)
- JavaWeb入门-----Http协议
- ServiceLoader原理解析
- 8. Python面向对象编程
- 【集训】jzoj 2017.7.11 noip模拟赛A 总结
- 编程语言 Python__002__字符串