动态库路径小结
程序员文章站
2022-06-03 13:54:28
...
动态库路径小结
1、概念:
众所周知,程序通过/lib/ld.so
寻找与加载动态库,且程序会在两种情况下加载动态库: 编译链接、运行,而动态库的寻找可以有以下多种配置方法。
2、两种情况下路径配置
1、编译链接时:
①gcc 的 -L 参数 :
gcc tt.cpp -o tt.out -I:./include -L./lib -L../lib -ldyn.so
②系统环境变量LIBRARY_PATH
:
export LIBRARY_PATH=./lib
2、运行时:
① 编译链接时候通过 -R选项(或 -rpath)指定 run-time path:
gcc tt.cc -o tt.out -Wl,-rpath=./
② 系统环境变量:
1、LD_LIBRARY_PATH:
系统运行时让动态链接库加载器(ld.so)在运行时(run-time)有一个额外的搜索路径选项,即增加 一个搜索路径列表。出于安全原因,对于已设置setuid或setgid的可执行文件,LD_LIBRARY_PATH
被完全忽略
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:path
2、LD_PRELOAD
:允许你定义在程序运行前优先加载的动态链接库文件。这个功能主要就是用来有选择性的载入不同 动 态链接库中的相同函数。已达到动态库运行时覆盖的目的。
export LD_PRELOAD=./hack.so
③ /etc/ld.so.conf
文件内存放可被全局共享的动态链接库所在目录:
[[email protected] sps]# ls /etc/ld.so.conf.d/
pau.conf HIKHost.conf mysql-x86_64.conf
kernel-2.6.32-431.el6.x86_64.conf
[[email protected] sps]# cat /etc/ld.so.conf.d/pau.conf
/home/netposa/pvg/pau
[[email protected] sps]# ldconfig
/etc/ld.so.conf
包含/etc/ld.so.conf.d
文件夹内配置文件, 配置好之后要通过ldconfig
命令更新路径到 /etc/ld.so.cache
缓存,ld.so
会从该缓存查找
④ 将所生成的动态库,放入 /lib 或 /usr/lib 目录下
3、优先级
以上方法配置的路径优先级依次降低
注意:234方法的影响是全局的,会影响到其他服务的库路径,不建议配置。如果一定要使用,可在局部环境下配置②环境变量。
参考:
https://blog.csdn.net/astrotycoon/article/details/9882227
https://www.cnblogs.com/openix/p/3521166.html
上一篇: vue2项目使用sass的示例代码