运行时:
sudo /sbin/ldconfig
出现以下错误:
/sbin/ldconfig: /usr/local/lib/ is not a symbolic link
当我运行文件时:
file /usr/local/lib/
/usr/local/lib/: directory
在/usr/local/lib/
内,我使用了三个库。我会在此处将其称为lib1
,lib2
和lib3
。
现在,当我在我的二进制文件上执行ldd
时,结果是:
lib1.so => not found
lib2.so => not found
lib3.so => /usr/local/lib/lib3.so (0x00216000)
但所有这些文件都与/usr/local/lib/{lib1,lib2,lib3}.so
位于同一文件夹中。
每次运行ldconfig
时,都会出现相同的错误:
/usr/local/lib/ is not a symbolic link
我认为/usr/local/lib
应该在/etc/ld.conf.d/*.conf
中声明两次,但不是:
sudo egrep '\/usr\/local' /etc/ld.so.conf.d/*
projectA.conf.old:/usr/local/projectA/lib
local.conf:/usr/local/lib
ld.so.conf
仅包含/etc/ld.so.conf.d/*.conf
,因此未处理此*.old
,并且它引用/usr/local/projectA/lib
。
经过一段时间后,我删除了所有lib1和lib2(在某些时候我在二进制文件夹上测试过它),发生了同样的错误。
答案 0 :(得分:38)
我遇到了Oracle 11R2客户端的这个问题。在我到达之前,不确定Oracle安装程序是否这样做了,或者有人在这里做过。它不是64位而是32位,都是64位。
错误是libexpat.so.1
不是符号链接。
事实证明,有两个相同的文件libexpat.so.1.5.2
和libexpat.so.1
。删除有问题的文件并使其成为1.5.2版本的符号链接导致错误消失。
从某种意义上说,您希望知名名称是当前版本的符号链接。如果你这样做,你就不太可能最终得到陈旧的库。
答案 1 :(得分:5)
解决,至少在问题的时候。
我在网上搜索之前询问,没有确凿的解决方案,这个错误的原因是:lib1.so和lib2.so不行,很可能是没有为64 PC编译的,但对于32位机器否则lib3.so是64位lib。至少这是我的假设。
非常不幸的是ldconfig没有给出干净的错误消息,告知它无法加载库,它只是泵:
ldconfig:/ folder_where_the_wicked_lib_is /不是符号链接
当我删除了ldd找不到的二进制文件时,我解决了这个问题。现在我更容易知道问题在哪里。
我的ld版本: GNU ld版本2.20.51,我不知道最新版本是否为其用户提供了更好的消息。
感谢。
答案 2 :(得分:2)
您需要在/etc/ld.so.conf中包含库的路径,并重新运行ldconfig以更新列表
其他可能性是在env变量LD_LIBRARY_PATH中包含库的路径,并重新运行可执行文件。
检查符号链接是否指向有效的库...
您可以直接在/etc/ld.so.conf中添加路径,而不包含...
运行ldconfig -p
以查看您的库是否包含在缓存中。
答案 3 :(得分:2)
我只是运行以下命令:
export LD_LIBRARY_PATH=/usr/lib/
现在工作正常。
答案 4 :(得分:1)
我也遇到了同样的问题, 它的解决方案是: 您收到错误的文件可能是另一个版本的实际文件的重复文件。因此,只需删除引发错误的特定文件即可解决问题。
答案 5 :(得分:0)
在shell中简单运行:sudo apt-get install --reinstall libexpat1
libxcb也遇到了同样的问题-用这种方式解决了-非常快:)