linux下动态库.so路径的配置

动态库路径配置

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文件内存放可被全局共享的动态链接库所在目录:
[root@localhost sps]# ls /etc/ld.so.conf.d/
pau.conf                     HIKHost.conf                       mysql-x86_64.conf 
kernel-2.6.32-431.el6.x86_64.conf
[root@localhost sps]# cat /etc/ld.so.conf.d/pau.conf 
/home/netposa/pvg/pau
[root@localhost sps]# ldconfig

/etc/ld.so.conf包含/etc/ld.so.conf.d文件夹内配置文件, 配置好之后要通过ldconfig命令更新路径到 /etc/ld.so.cache缓存,ld.so会从该缓存查找

④ 将所生成的动态库,放入 /lib 或 /usr/lib 目录下

3、优先级

​ 以上方法配置的路径优先级依次降低

注意:234方法的影响是全局的,会影响到其他服务的库路径,不建议配置。如果一定要使用,可在局部环境下配置②环境变量。


参考:

https://www.cnblogs.com/openix/p/3521166.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值