免费注册 查看新帖 |

Chinaunix

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

ldd和运行时提示找不到某个so [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-12 00:20 |只看该作者 |倒序浏览
我用同样的方法编译了8个so,并且链接到 某个目录 ,并将这个目录加到ld.so.conf了
另外编译了一个可执行文件,它依赖这8个so

编译都没问题 (表面上看来)

但是执行的时候,提示我找不到8个so中的某几个,并不是提示这8个so都找不到,用ldd命令看也是一样,部分能找到

大家知道是什么原因吗?


另外一个问题:什么方式不需要在ld.so.conf中设置目录呢,也就是我希望跟windows一样,能自动找到在本目录下的so
不知道我说清楚了没有

我是linux新手,以前一直做windows下开发,谢谢大虾指点

论坛徽章:
0
2 [报告]
发表于 2011-06-12 11:55 |只看该作者
http://blog.chinaunix.net/space. ... =blog&id=366963

你得执行下ldconfig,应该就可以了

假设你编译出来的可执行文件是 a.out,你执行 ldd a.out 就可以看到运行时是否能找到相应的库了

[root@redhat tcpBreak]# ldd a.out
        libtest.so => not found
        libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x40024000)
        libm.so.6 => /lib/tls/libm.so.6 (0x400d7000)
        libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x400f9000)
        libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)

这种not found的情况,执行时就找不到

论坛徽章:
0
3 [报告]
发表于 2011-06-14 22:08 |只看该作者
本帖最后由 bbxyard 于 2011-06-14 22:40 编辑

楼主:链接时OK了,像必用的"-L MyLibPath -lxxx " 或 绝对路径“MyLibPath/libxxx.so”的形式.
linux 可执行文件在$PATH里找,动态库在$LD_LIBRARY_PATH(这个一般就是/lib /usr/lib两个目录)
-L 指定的"MyLibPath"不在环境变量里,当然找不到了.

linux 开发环境推荐的搭建方式.

可以在自己的home目录里(快捷方式:运行push ~ 或cd ~ 或 cd即可),分别建立bin lib目录.
然后 vim .bashrc
#在文件尾部 将bin lib 两个目录设置到这两个环境变量里来.
#. 注意这里一定是export. 不然不生效的.

  1. export PATH=.:$HOME/bin:$PATH
  2. export LD_LIBRARY_PATH=.:$HOME/lib:$LD_LIBRARY_PATH
复制代码
#. 然后重启动shell 或者
. .bashrc 或者
source .bashrc 即可 重新设置环境变量.
#. 检查一下: echo $LD_LIBRARY_PATH 有值 就说明OK了.

#. 然后把楼主的8个lib文件,建个符号链接放在lib下,运行那个可执行文件就OK啦

论坛徽章:
0
4 [报告]
发表于 2011-06-17 00:02 |只看该作者
非常感谢两位。
我的问题是这么解决的。
我编译8个so的时候,在编译好其中的几个后,曾经想用ldd看看依赖怎么样,因为不想在系统目录下有我的文件,只好在conf里面配了我的目录,ldconfig了一下,发现ok的
然后编译剩下的so
然后编译exe
这个时候忘记再ldconfig一下。
后来我调这个后,就能找到了。


linux下发现的错误可谓是五花八门,呵呵,有点意思

论坛徽章:
0
5 [报告]
发表于 2011-06-17 12:13 |只看该作者
目录加到ld.so.conf之后要ldconfig一下,这才是最主要问题

论坛徽章:
0
6 [报告]
发表于 2011-06-17 13:24 |只看该作者
本帖最后由 bbxyard 于 2011-06-17 13:29 编辑

不是所有用户都使用的可执行程序和.so .a建议放在自己“家”里,不用惊动管理员哈:emn1:

linux要保持“最小权限”
/etc/ld.so.conf 和 ldconfig 没有root权限不能操作的.

  1. export PATH=.:$HOME/bin:$PATH
  2. export LD_LIBRARY_PATH=.:$HOME/lib:$LD_LIBRARY_PATH
复制代码
建议还是自己家里,建个bin,lib以后系统重做了,都不受影响,而且如果是多人协作的话,还不干扰别人的程序.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP