博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LD_PRELOAD & LD_LIBRARY_PATH 动态库路径
阅读量:6681 次
发布时间:2019-06-25

本文共 2070 字,大约阅读时间需要 6 分钟。

参考:http://www.cnblogs.com/waterlin/archive/2011/07/14/2106056.html

143上的glibc较低,同学又不能进行升级(造成全局影响),所以使用了LD_LIBRARY_PATH,将179上的/lib,然后在.bashrc中添加

export LD_LIBRARY_PATH=path/lib:path/lib/x86_64-linxu-gnu

 

参考自:

http://blog.csdn.net/haoel/article/details/1602108

http://skatings.blogbus.com/logs/50437681.html

LD_PRELOAD 是这样的一个环境变量:它可以影响程序的运行时的链接(Runtime linker),它允许你定义在程序运行前优先加载的动态链接库。该功能主要就是用来有选择性的载入不同动态链接库中的相同函数。通过这个环境变量,我们 可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。

 

在Linux下面,共享库的寻找和加载是由 /lib/ld.so实现的。ld.so在标准路径(/lib, /usr/lib) 中寻找应用程序的共享库。

那么:

如果需要用到的共享库在非标准路径,ld.so怎么找到这些库呢?

方法一:

链接时候通过 -R选项(或 -rpath)指定 run-time path.

 

方法二:

使用LD_LIBRARY_PATH来处理非标准路径的共享库。ld.so加载共享库的时候,也会查找这个变量锁设置的路径。

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:pathexport LD_LIBRARY_PATH

 

方法三:

(1)将非标准库路径加入  /etc/ld.so.conf;/etc/ld.so.conf文件内存放着可被Linux共享的动态链接库所在目录的名字(系统目录/lib, /usr/lib除外)

(2)运行ldconfig跟新 /etc/ld.so.cache;ld.so加载共享库的时候,会从ld.so.cache查找。

 

方法四:

(1)将所生成的动态库,放入  /lib 或  /usr/lib  目录下;

(2)调用ldconfig   否则找不到library  (ldconfig 跟新 ld.so.cache).

 

动态库的搜索路径搜索的先后顺序是:    编译目标代码时指定的动态库搜索路径    环境变量LD_LIBRARY_PATH指定的动态库搜索路径    配置文件/etc/ld.so.conf中指定的动态库搜索路径    默认的动态库搜索路径/lib    默认的动态库搜索路径/usr/lib

 

附:

参考自:http://www.ituring.com.cn/article/22101

LD_LIBRARY_PATH是一个环境变量,它的作用是为ld.so在运行时提供一个额外的搜索路径列表。

出于安全原因,对于已设置setuid或setgid的可执行文件,LD_LIBRARY_PATH被完全忽略。

LD_LIBARY_PATH的需求有很多:

1、兼容性测试2、将动态库放置它处,做临时测试

LD_LIBRARY_PATH不仅影响程序的加载,而且在链接阶段也会被搜索,顺序位于-L所指定的目录之后(没有-L选项也会被搜索).

好的使用LD_LIBRARY_PATH的例子应该是:

1、升级共享库时,替换之前先测试一下2、类似的,升级后的某个程序可能依赖于一些动态链接库,如果你将某个链接库替换了,程序可能就无法工作了。这时候,你可以使用LD_LIBRARY_PATH指向存有备份的一个目录,然后,你可以没有顾忌地替换系统版本了。万一出错,拷贝回去就是了。

 

规范的LD_LIBRARY_PATH使用方法:

1、绝不要设置全局的LD_LIBRARY_PATH2、如果你一定要发布(ship)一个依赖于标准库的程序,而且要把它安装到非标准位置,按下面方法之一实施:    (1)发布二进制.o文件,在安装过程中使用正确的已安装的库来重新链接。    (2)发布可执行文件时,嵌入一个很长的虚假运行时库路径,在安装过程中,使用二进制编辑器将其替换为正确的库路径。    (3)如果你必须使用LD_LIBRARY_PATH,将其封装起来(如在局部的脚本中使用),而不至于影响其它程序。

 

附:

参考:http://www.cnblogs.com/openix/admin/EditPosts.aspx?postid=2431791

ldconfig是动态链接库的管理命令。该命令主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库,进而创建/跟新ld.so所需的链接和缓存文件。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表。

你可能感兴趣的文章
jdbc性能优化
查看>>
linux下activemq异常退出,重启失败
查看>>
WordPress条件判断标签(Conditional Tags)手册
查看>>
【05】中级:翻页采集(以微博博主主页采集为例)
查看>>
iOS不规则按钮的响应事件的处理方法
查看>>
Linux下密码过期时间设置
查看>>
ScrollView的任意位置定位,scrollTo和scrollBy无效
查看>>
contentResolver.Query()的四个参数
查看>>
神经质人格
查看>>
tensorflow example
查看>>
解密Redis持久化
查看>>
linux磁盘管理系列三:LVM的使用
查看>>
phpize的用处
查看>>
PHP日历代码:一个循环还是两个循环
查看>>
storm 读取kafka数据 单机测试
查看>>
使用rebar3创建erlang项目通过cowboy与页面交互
查看>>
HOW TO INSTALL XEN HYPERVISOR ON DEBIAN 9 “STRETCH” AND DEBIAN 8 “JESSIE” LINUX SYSTEMS
查看>>
tomcat问题
查看>>
基础算法----判断字符串是否为另一个字符串的真子集
查看>>
公用外部函数接口——CFFI
查看>>