免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5211 | 回复: 15
打印 上一主题 下一主题

[Linux] 一个程序运行时搜索动态库路径的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-03-11 18:20 |只看该作者 |倒序浏览
大家对 makefile 熟么

我有一个问题,如果不指定运行时库路径,那么又不是dlopen 打开动态库,且动态库也不再 /usr/lib /lib/  /usr/local/lib 下

为什么我的程序运行能够在运行程序所在的目录找到动态库呢

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2015-03-11 21:59 |只看该作者
你搜一下程序运行时动态库的搜索路径
受LD_LIBRARY_PATH环境变量、编译时指定的rpath还有/etc/ld.so.conf等多个因素影响
这些路径有个搜索优先级,先去某个路径搜索,没找到去下一个等等
你这里其他路径下都没有,同目录下有,是不是./这个目录也在哪个以上因素中包含了

论坛徽章:
0
3 [报告]
发表于 2015-03-12 09:41 |只看该作者
链接选项好像也没有,都是动态库的编译目录
LD_LIBRARY_PATH 下面只有中间件 与 java 的路径,隐式调用动态库的 动态库的makefile 没有使用-rpath 后面跟着 ./ 或者 ../ 编译选项
/etc/ld.so.conf.d 下面的一堆 .conf里面也没有的

求职 : 机器学习
论坛徽章:
79
2015年亚洲杯纪念徽章
日期:2015-05-06 19:18:572015七夕节徽章
日期:2015-08-21 11:06:172015亚冠之阿尔纳斯尔
日期:2015-09-07 09:30:232015亚冠之萨济拖拉机
日期:2015-10-21 08:26:3915-16赛季CBA联赛之浙江
日期:2015-12-30 09:59:1815-16赛季CBA联赛之浙江
日期:2016-01-10 12:35:21技术图书徽章
日期:2016-01-15 11:07:2015-16赛季CBA联赛之新疆
日期:2016-02-24 13:46:0215-16赛季CBA联赛之吉林
日期:2016-06-26 01:07:172015-2016NBA季后赛纪念章
日期:2016-06-28 17:44:45黑曼巴
日期:2016-06-28 17:44:4515-16赛季CBA联赛之浙江
日期:2017-07-18 13:41:54
4 [报告]
发表于 2015-03-12 09:51 |只看该作者
我建议你重启一次电脑试试

论坛徽章:
0
5 [报告]
发表于 2015-03-12 10:01 |只看该作者
回复 4# zsszss0000


    那是为什么,好像重新启动也没有问题啊

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
6 [报告]
发表于 2015-03-12 10:45 |只看该作者
1. ldd ./a.out  | grep libxxx.so
2. ldconfig -p | grep libxxx.so
以上两条判断libxxx.so是不是通过 ld.conf.d 加载

3. readelf -d ./a.out | grep RPATH
判断是否设置了 rpath

4. env | grep LD_LIBRARY_PATH
export LD_LIBRARY_PATH=
ldd ./a.out
判断是否因为 LD_LIBRARY_PATH 起的作用

通过以上应该可以判断是从哪里加载的 so

man ld.so

回复 1# mummy_zq


   

论坛徽章:
0
7 [报告]
发表于 2015-03-12 11:57 |只看该作者
1. ldd libbbb.so  | grep libaaa.so
    libaaa.so  => not found  
    ldd main  | grep libaaa.so
libaaa.so  => not found  
2. ldconfig -p | grep libaaa.so
应该不是通过 ld.conf.d 加载的吧

3. readelf -d libbbb.so | grep RPATH
    readelf -d main | grep RPATH
   
没有结果,好像也不是设置了 rpath
判断是否设置了 rpath

4. env | grep LD_LIBRARY_PATH

LD_LIBRARY_PATH=/home/orbix/shlib:/home/orbix/shlib/default:/home/orbix/shlib/lib64:/home/orbix/shlib/default/lib64:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre/lib/i386/server:
LD_LIBRARY_PATH_64=/home/orbix/shlib/lib64:/home/orbix/shlib/default/lib64:/home/orbix/shlib:/home/orbix/shlib/default:
-bash-4.1$ LD_LIBRARY_PATH_64=/home/orbix/shlib/lib64:/home/orbix/shlib/default/lib64:/home/orbix/shlib:/home/orbix/shlib/default:

好像也不是的阿


man ld.so
我们的机器无法支持 man 命令的

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
8 [报告]
发表于 2015-03-12 13:32 |只看该作者
回复 7# mummy_zq
LD_LIBRARY_PATH不能以:结尾,否则就包含了当前目录

   

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-08 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-08-29 06:20:00数据库技术版块每日发帖之星
日期:2015-09-18 06:20:00数据库技术版块每周发帖之星
日期:2015-11-06 19:56:51数据库技术版块每日发帖之星
日期:2016-01-22 06:20:00数据库技术版块每日发帖之星
日期:2016-02-05 06:20:00
9 [报告]
发表于 2015-03-12 14:05 |只看该作者
你的主贴说能找到动态库,那么 ldd a.out 时不应该有 “ XXXX not found  ” 的
你找一个 ldd 结果没有 not found 的终端,看看你的 libaaa.so 用的哪个目录下的
LD_LIBRARY_PATH 里应该有这个目录

回复 7# mummy_zq


   

论坛徽章:
0
10 [报告]
发表于 2015-03-12 15:20 |只看该作者
井蛙夏虫 发表于 2015-03-12 13:32
回复 7# mummy_zq
LD_LIBRARY_PATH不能以:结尾,否则就包含了当前目录


是这个样子么啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP