1.首先查看程序文件的.dynamic 段是否包含了一个叫DT_RPATH的项(它是一个以冒号分隔的库文件搜索目录列表)

怎么设置这个选项?

需要在编译连接程序的时候使用-Wl,-rpath选项,假设一个程序test需要使用liblib.so库,如下所示进行编译连接:

g++ -o test -L. -llib -Wl,rpath=./ test.cpp

这样在执行test程序时,test便会先到./即当前目录下查找所需要的动态库liblib.so

2.查找是否存在环境变量 LD_LIBRARY_PATH(它是一个以冒号分隔的库文件搜索目录列表)

怎么设置这个选项?当然是设置linux下的环境变量就可以了。

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:./

当然,这种方法是对当前登录生效的。如果想开机即有效,跟其它环境变量的设置也是一样,需要修改一些配置文件。

3.查看库高速缓存文件 /etc/ld.so.conf ,它包含了库名和路径的一个对应列表,如果库名存在,连接器就使用它对应的路径,用这个查找方法能够找到大部分的库。

怎么设置这个选项?可以直接编辑ld.so.conf加入需要查找的路径,也可以在/etc/ld.so.conf.d目录下的己有文件中加入路径,或者在该目录下新建一个文件(名字为*.conf即可),再把需要的路径加入到该文件中。最后执行ldconfig即可生效。

4.查找默认路径/lib和/usr/lib,

如果经过了以上的步骤仍然查找失败,则将报错并退出相关程序。

对于前三个步骤来说,我们均是可以进行设置调整的,其中第三个步骤中的设置需要root权限才能进行,且会影响所有的程序。当使用第一、第二中的方法进行了设置调整后,我们便可以使多种版本的库共存在同一环境下进行测试,同名也无所谓。
*********************************************************************

环境变量LD_LIBRARY_PATH用来指定查找共享库时除了默认路径之外的其他路径。(该路径在默认路径之前查找)
移植程序时的经常碰到需要使用一些特定的动态库,而这些编译好的动态库放在我们自己建立的目录里,这时我们可以设置LD_LIBRARY_PATH。
例:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/work/lib/
这样就可以使用/work/lib/下的库文件了,运行程序后系统会自动到环境变量LD_LIBRARY_PATH指定的路径中查找其所需的库。
系统查找动态库的顺序
系统先找LD_LIBRARY_PATH下的库再找/lib and /usr/lib等路径下的库,还有/etc/ld.so.conf里指定的路径(如果ld.so.conf存在),man ldconfig for more information
[url=http://infomax/bbs/misc.php?action=viewratings&tid=111&pid=228][/url]
使Linux启动之后就加载LD_LIBRARY_PATH的路径
/etc/rc.d/rc.local文件中加入export LD_LIBRARY_PATH="xxxxx" 即可
如果在链接时使用了"-R"和"-L"选项,则相关动态库的路径将保存在ELF文件中,于
是以后的运行中不再需要设置环境变量去定位动态库。比如,有一个
/usr/local/lib/libfoo.so,而你的bar程序需要这个libfoo.so,编译、链接时最好

这样 :gcc -Wall -pipe -O3 -o bar -R/usr/local/lib -L/usr/local/lib bar.c -lfoo

原文地址:http://www.cnblogs.com/lovevivi/archive/2013/01/15/2861211.html

linux动态库的查找顺序相关推荐

  1. [Linux] 动态库加载顺序

    可以看看这篇文章:linux 动态链接库的加载顺序 编译程序时链接 so 库顺序如下: gcc 编译时参数 -L 指定的路径 gcc -o demux demuxing_decoding.c -L / ...

  2. linux动态库查找路径以及依赖关系梳理

    编译时与运行时库的路径 linux下,编译时与运行时库的搜索路径是不同的 运行时动态库的路径搜索顺序 LD_PRELOAD环境变量,一般用于hack 编译目标代码时指定的动态库搜索路径(指的是用 -w ...

  3. 【linux】程序找不到动态库.so的解决办法|查看.so动态库信息|.so动态库加载顺序

    目录 找不到.so解决方法 方法一:添加环境变量 方法二:复制so文件到lib路径 方法三:(推荐)添加ldconfig寻找路径 方法四:在编译目标代码时指定该程序的动态库搜索路径 让程序在本目录找到 ...

  4. Linux找头文件规则,linux 头文件、库文件查找顺序

    linux 头文件.库文件查找顺序 默认分类 2009-11-14 01:24:28 阅读126 评论0 字号:大中小 linux 头文件.库文件查找顺序 2009-11-03 12:36 Inclu ...

  5. Linux动态库(.so)搜索路径

    众所周知,Linux动态库的默认搜索路径是/lib和/usr/lib.动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库,并且该动 态库还未加载到内存中,则系统会自动到这两个默认搜索路 ...

  6. Linux 动态库的显示调用

    Linux 动态库的显示调用 分类: 动态库与静态库 2012-03-17 23:56 1710人阅读 评论(0) 收藏 举报 linuxnulllibrary测试web服务apache 10.动态库 ...

  7. bazel 链接第三方动态库_C/C++编程知识:Linux 动态库相关知识整理

    动态库和静态库在C/C++开发中很常见,相比静态库直接被编译到可执行程序,动态库运行时加载使得可执行程序的体积更小,更新动态库可以不用重新编译可执行程序等诸多好处.作者是一个Linux后台开发,这些知 ...

  8. linux代码动态分析软件,举例分析Linux动态库和静态库

    函数库分为静态库和动态库两种.创建Linux静态库和Linux动态库和使用它们在这里将以举例的形式详述一下.静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库.动态库在程序编译时并不 ...

  9. Linux动态库和静态库比较

     Linux动态库和静态库比较文件预览 文件目录树如下,如你所见,非常简单.    1. libtest/    2. |-- lt.c    3. |-- lt.h    4. `-- test.c ...

最新文章

  1. 2017年第六届数学中国数学建模国际赛(小美赛)C题解题思路
  2. php图标按钮,CSS如何创建图像图标按钮(附代码)
  3. 用rand_7()实现rand_10()
  4. C++ deque 底层原理及 queue、stack 容器的使用详解
  5. GIT项目管理工具(part10)--分支管理
  6. 2017-2018-1 20155301 《信息安全系统设计基础》第7周学习总结
  7. 操作系统上机题目(多进程1)
  8. 图片饱和度_摄影后期完全调色指南(三):饱和度与自然饱和度有什么区别?...
  9. 组策略设置IE 11的Compatible View
  10. 6.1bash编程入门值变量类型、for循环和算术运算
  11. firefox如何载入json文件_Firefox在书签工具栏中推隐藏“其他书签”文件夹功能
  12. ORA-02049: 超时: 分布式事务处理等待锁
  13. python程序变量名_python 变量名的规范
  14. cosmic中文翻译_cosmic是什么意思,cosmic翻译成中文,英译中-xyz翻译网
  15. Angr安装与使用之使用篇(十三)
  16. java流程图表示输入 输出_流程图 - 迷途行者 - 博客园
  17. 史上最强的10大管理定律
  18. 毕设之 yolo5 航空影像飞行器检测
  19. java高校选课系统博客,学生选课系统
  20. 俞一帆:5G边缘计算助力工业现场智能

热门文章

  1. php 数组分块查找,laravel 控制器类DB的相关操作操作
  2. 从AI到BI,全面解读人工智能与商业智能
  3. 我的世界服务器皮肤怎么用文件夹,我的世界皮肤正文件,皮肤制作器怎么打开文件夹...
  4. asp开发的微信公众号电子会员卡系统汽车美容店洗车保养店版源码下载
  5. Coaxial Light vs Ring Light on Reflective Surfaces
  6. 优化支付服务器,技术揭秘:微信付款码是如何完成付款并优化速度的?
  7. 数通IA实验题目topo
  8. python 阿里云短信服务接入流程
  9. 《互联网+智能家居--传统家居颠覆与重构》(陈根)读书笔记及总结
  10. 深度学习-83:金融科技公司