48

运行时:

    sudo /sbin/ldconfig

出现以下错误:

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

当我运行file命令时,会出现以下内容:

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

里面/usr/local/lib/有我使用的三个库。我在这里称它们为lib1,lib2lib3

现在,当我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(有时我在二进制文件夹中对其进行了测试),发生了同样的错误。

4

6 回答 6

51

我在使用 Oracle 11R2 客户端时遇到了这个问题。不确定 Oracle 安装程序是这样做的,还是在我到达之前有人这样做。它不是 64 位与 32 位,都是 64 位。

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

原来有两个相同的文件,libexpat.so.1.5.2libexpat.so.1. 删除有问题的文件并使其成为 1.5.2 版本的符号链接会导致错误消失。

您希望知名名称成为当前版本的符号链接是有道理的。如果你这样做,你最终得到一个陈旧的库的可能性就会降低。

于 2013-06-18T19:34:18.497 回答
7

我只是运行以下命令:

export LD_LIBRARY_PATH=/usr/lib/

现在它工作正常。

于 2016-05-26T12:11:01.233 回答
5

至少在问题的关键点上解决了。

问之前我在网上搜索了一下,没有确定的解决方案,这个错误的原因是:lib1.so和lib2.so不OK,很可能不是为64位PC编译的,而是为32位机器编译的否则 lib3.so 是一个 64 位的库。至少这是我的假设。

非常不幸ldconfig的是,它没有给出一个干净的错误消息,通知它无法加载库,它只泵:

ldconfig: /folder_where_the_wicked_lib_is/ 不是符号链接

当我删除ldd二进制文件未找到的库时,我解决了这个问题。现在我更容易知道问题出在哪里。

我的 ld 版本:GNU ld 版本 2.20.51,我不知道最新版本是否有更好的信息给用户。

谢谢。

于 2012-07-18T14:16:29.973 回答
2

您需要在 /etc/ld.so.conf 中包含库的路径,然后重新运行 ldconfig 以更新列表

其他可能性是在环境变量 LD_LIBRARY_PATH 中包含库的路径,然后重新运行可执行文件。

检查符号链接是否指向有效的库...

可以直接在/etc/ld.so.conf中添加路径,不包括...

运行ldconfig -p以查看您的库是否很好地包含在缓存中。

于 2012-07-18T13:17:01.217 回答
1

我也遇到了同样的问题,解决方案是:您收到错误的文件可能是另一个版本的实际文件的重复文件。因此,只需删除引发错误的特定文件即可解决问题。

于 2021-01-04T04:15:37.197 回答
0

在 shell 中简单运行: sudo apt-get install --reinstall libexpat1
与 libxcb 有同样的问题 - 以这种方式解决 - 非常快:)

于 2019-07-20T19:03:09.613 回答