linux下so动态库一些不为人知的秘密(中二)

简介: 继续上一篇《 linux下so动态库一些不为人知的秘密(中) 》介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH。

继续上一篇《 linux下so动态库一些不为人知的秘密(中) 》介绍so搜索路径,还有一个类似于-path,叫LD_RUN_PATH环境变量, 它也是把路径编译进可执行文件内,不同的是它只设置RPATH。

 [stevenrao]  g++ -o demo -L /tmp/  -ltmp main.cpp
 [stevenrao]  readelf -d demo
 Dynamic section at offset 0xb98 contains 25 entries:
  Tag        Type                         Name/Value
 0x0000000000000001 (NEEDED)             Shared library: [libtmp.so]
 ....
 0x000000000000000f  (RPATH)              Library rpath: [/tmp/]
 
  另外还可以通过配置 /etc/ld.so.conf,在其中加入一行
  /tmp/
  这个配置项也是只对运行期有效,并且是全局用户都生效,需要root权限修改,修改完后需要使用命令 ldconfig 将 /etc/ld.so.conf 加载到 ld.so.cache中,避免重启系统就可以立即生效。
  除了前面介绍的那些搜索路径外,还有缺省搜索路径/usr/lib/ /lib/ 目录,可以通过-z nodefaultlib编译选项禁止搜索缺省路径。
  [stevenrao] $  g++ -o demo -z nodefaultlib  -L/tmp -ltmp main.cpp
  [stevenrao] $   ./demo
   ./demo: error while loading shared libraries:  libstdc++.so.6: cannot open shared object file
 
  这么多搜索路径,他们有个先后顺序如下
  1、RUMPATH 优先级最高
  2、RPATH   其次
  3、LD_LIBRARY_PATH
  4、/etc/ld.so.cache
  5、/usr/lib/ /lib/
 
  查看一个程序搜索其各个动态库另一个简单的办法是使用 LD_DEBUG这个环境变量;
  [stevenrao] $  export LD_DEBUG=libs
  [stevenrao] $  ./demo
  下一篇介绍动态库内符号问题
目录
相关文章
|
2月前
|
Unix Linux vr&ar
【详解】静态库和动态库的认识和使用【Linux】
【详解】静态库和动态库的认识和使用【Linux】
101 0
|
4月前
|
Linux 编译器 Shell
深入理解Linux中的动态库与静态库
深入理解Linux中的动态库与静态库
|
7月前
|
Linux 编译器 C语言
【Hello Linux】动态库和静态库(上)
【Hello Linux】动态库和静态库
32 0
|
22小时前
|
Linux vr&ar C语言
|
2天前
|
存储 Linux 编译器
【Linux】详解动态库链接和加载&&对可执行程序底层的理解
【Linux】详解动态库链接和加载&&对可执行程序底层的理解
|
5天前
|
存储 Linux 编译器
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
【探索Linux】P.13(文件系统 | 软硬链接 | 动态库和静态库)
12 0
|
14天前
|
存储 Linux 编译器
Linux静态库与动态库的使用
Linux静态库与动态库的使用
|
17天前
|
Linux 编译器 vr&ar
【库函数】Linux下动态库.so和静态库.a的生成和使用
【库函数】Linux下动态库.so和静态库.a的生成和使用
11 1
|
1月前
|
Linux C语言
【Linux】C语言动态库和静态库的制作和使用
【Linux】C语言动态库和静态库的制作和使用
|
2月前
|
缓存 算法 Linux
深入理解Linux动态库加载:路径、问题与解决方案
深入理解Linux动态库加载:路径、问题与解决方案
161 0