参考: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:path
export 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的需求有很多:

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

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

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

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

规范的LD_LIBRARY_PATH使用方法:

、绝不要设置全局的LD_LIBRARY_PATH
、如果你一定要发布(ship)一个依赖于标准库的程序,而且要把它安装到非标准位置,按下面方法之一实施:
()发布二进制.o文件,在安装过程中使用正确的已安装的库来重新链接。
()发布可执行文件时,嵌入一个很长的虚假运行时库路径,在安装过程中,使用二进制编辑器将其替换为正确的库路径。
()如果你必须使用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,此文件保存已排好序的动态链接库名字列表。

LD_PRELOAD & LD_LIBRARY_PATH 动态库路径的更多相关文章

  1. gcc 动态编译 动态库路径

    gcc 动态编译(共享库) 动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令优点:体积小,编译快缺点:依赖性高 代码如下: [root@74-82-173-21 ...

  2. 转: gcc 指定运行时动态库路径

    gcc 指定运行时动态库路径 Leave a reply 由于种种原因,Linux 下写 c 代码时要用到一些外部库(不属于标准C的库),可是由于没有权限,无法将这写库安装到系统目录,只好安装用户目录 ...

  3. Linux动态库路径配置

    参考链接:https://blog.csdn.net/blade2001/article/details/32839937 为什么要关注动态库路径配置,是因为工作中遇到动态库依赖其他动态库,而其他动态 ...

  4. gcc -rpath 指定动态库路径

    gcc -rpath 指定动态库路径 http://blog.csdn.net/v6543210/article/details/44809405

  5. Linux 指定运行时动态库路径【转】

    转自:http://www.cnblogs.com/cute/archive/2011/02/24/1963957.html 众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/l ...

  6. linux 给运行程序指定动态库路径

    1. 连接和运行时库文件搜索路径到设置 库文件在连接(静态库和共享 库)和运行(仅限于使用共享库的程序)时被使用,其搜索路径是在系统中进行设置的.一般 Linux 系统把 /lib 和 /usr/li ...

  7. 转:动态库路径配置- /etc/ld.so.conf文件

    Linux 共享库 Linux 系统上有两类根本不同的 Linux 可执行程序.第一类是静态链接的可执行程序.静态可执行程序包含执行所需的所有函数 — 换句话说,它们是“完整的”.因为这一原因,静态可 ...

  8. cgo -rpath指定动态库路径

    // #cgo CFLAGS: -Wall // #cgo LDFLAGS: -Wl,-rpath="/home/liuliang/ffmpeg-build/lib" // #cg ...

  9. 谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH PKG_CONFIG_PATH

    谈谈Linux下动态库查找路径的问题 ldconfig LD_LIBRARY_PATH  PKG_CONFIG_PATH 转载自:http://blog.chinaunix.net/xmlrpc.ph ...

随机推荐

  1. 1. K近邻算法(KNN)

    1. K近邻算法(KNN) 2. KNN和KdTree算法实现 1. 前言 K近邻法(k-nearest neighbors,KNN)是一种很基本的机器学习方法了,在我们平常的生活中也会不自主的应用, ...

  2. 1:(0or1)

    public class User    {       public int ID { get; set; }       public string UserName { get; set; } ...

  3. jvm面试题

     1.虚拟机的类加载机制 1.1.什么是虚拟机的类加载机制 在代码编译后,就会生成JVM(Java虚拟机)能够识别的二进制字节流文件(*.class).而JVM把Class文件中的类描述数据从文件加载 ...

  4. Thinkphp CURD中的where方法

    今天来给大家讲下查询最常用但也是最复杂的where方法,where方法也属于模型类的连贯操作方法之一,主要用于查询和操作条件的设置.where方法的用法是ThinkPHP查询语言的精髓,也是Think ...

  5. /.well-known/apple-app-site-association

    Technical Q&A QA1919 Incoming requests for /.well-known/apple-app-site-association file Q:  Why ...

  6. 合并ts文件

    合并ts文件 合并ts文件 参考资料 合并ts文件 文件在手机中的存储: ├── fe2cd5a64fe78a69f90a7c0a2b08a240e1444082.ts ├── ff5b590b44e ...

  7. [net]ftp ssh http telnet https服务及端口

    转自:http://blog.csdn.net/qq_34642668/article/details/52116490 FTP服务器,则是在互联网上提供存储空间的计算机,它们依照FTP协议提供服务. ...

  8. Android——BroadcastReceiver

    注释:一般广播不会被阻断,有序广播则会被阻断 注释:这是用动态注册的广播,必须要解绑 xml <?xml version="1.0" encoding="utf-8 ...

  9. Hbuilder开发app实战-识岁03-文件上传

    前言 做app不得不谈的问题就是文件上传.用hbuilder开发app让上传变的非常easy. Uploader Uploader模块管理网络上传任务,用于从本地上传各种文件到server,并支持跨域 ...

  10. linq操作符:连接操作符

    linq中的连接操作符主要包括Join()和GroupJoin()两个. 一.Join()操作符 Join()操作符非常类似于T-SQL中的inner join,它将两个数据源进行连接,根据两个数据源 ...