ldd和运行时提示找不到某个so
我用同样的方法编译了8个so,并且链接到 某个目录 ,并将这个目录加到ld.so.conf了
另外编译了一个可执行文件,它依赖这8个so
编译都没问题 (表面上看来)
但是执行的时候,提示我找不到8个so中的某几个,并不是提示这8个so都找不到,用ldd命令看也是一样,部分能找到
大家知道是什么原因吗?
另外一个问题:什么方式不需要在ld.so.conf中设置目录呢,也就是我希望跟windows一样,能自动找到在本目录下的so
不知道我说清楚了没有
我是linux新手,以前一直做windows下开发,谢谢大虾指点
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
本帖最后由 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. 不然不生效的.
复制代码#. 然后重启动shell 或者
. .bashrc 或者
source .bashrc 即可 重新设置环境变量.
#. 检查一下: echo $LD_LIBRARY_PATH 有值 就说明OK了.
#. 然后把楼主的8个lib文件,建个符号链接放在lib下,运行那个可执行文件就OK啦
非常感谢两位。
我的问题是这么解决的。
我编译8个so的时候,在编译好其中的几个后,曾经想用ldd看看依赖怎么样,因为不想在系统目录下有我的文件,只好在conf里面配了我的目录,ldconfig了一下,发现ok的
然后编译剩下的so
然后编译exe
这个时候忘记再ldconfig一下。
后来我调这个后,就能找到了。
linux下发现的错误可谓是五花八门,呵呵,有点意思
目录加到ld.so.conf之后要ldconfig一下,这才是最主要问题
本帖最后由 bbxyard 于 2011-06-17 13:29 编辑
不是所有用户都使用的可执行程序和.so .a建议放在自己“家”里,不用惊动管理员哈:emn1:
linux要保持“最小权限”
/etc/ld.so.conf 和 ldconfig 没有root权限不能操作的.
复制代码建议还是自己家里,建个bin,lib以后系统重做了,都不受影响,而且如果是多人协作的话,还不干扰别人的程序.
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的情况,执行时就找不到