ldconfig错误:不是符号链接

时间:2012-07-18 13:13:41

标签: linux linker makefile gnu-make

运行时:

    sudo /sbin/ldconfig

出现以下错误:

    /sbin/ldconfig: /usr/local/lib/ is not a symbolic link

当我运行文件时:

    file /usr/local/lib/
    /usr/local/lib/: directory

/usr/local/lib/内,我使用了三个库。我会在此处将其称为lib1lib2lib3

现在,当我在我的二进制文件上执行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(在某些时候我在二进制文件夹上测试过它),发生了同样的错误。

6 个答案:

答案 0 :(得分:38)

我遇到了Oracle 11R2客户端的这个问题。在我到达之前,不确定Oracle安装程序是否这样做了,或者有人在这里做过。它不是64位而是32位,都是64位。

错误是libexpat.so.1不是符号链接。

事实证明,有两个相同的文件libexpat.so.1.5.2libexpat.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也遇到了同样的问题-用这种方式解决了-非常快:)