linux - 使用 Linux 加载程序时 ldconfig 错误 :"is not a symb

运行时:

    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/ 中,我使用了三个库。我在这里将它们称为 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(有时我在二进制文件夹中对其进行了测试),出现了同样的错误。

最佳答案

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

错误是 libexpat.so.1 不是符号链接(symbolic link)。

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

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

关于linux - 使用 Linux 加载程序时 ldconfig 错误 :"is not a symbolic link",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11542255/

相关文章:

linux - 跨多台计算机管理用户配置文件

linux - 使用 'sudo apt-get install build-essentials'

linux - 在家学习内核黑客和嵌入式开发?

linux - 当我在脚本中使用它时,无法关闭带有 echo "^]"的 scpi(telnet)

linux - RealUID,保存的 UID,有效的 UID。这是怎么回事?

c - Linux内核代码中的 "EXPORT_SYMBOL"是什么意思?

linux - 应用程序如何在运行时解析为不同版本的共享库?

linux - 如何找出哪个进程正在消耗 "wait CPU"(即 I/O 阻塞)

linux - 让 Tk 看起来像一个原生 Linux 应用程序

linux - 需要对 Linux bash 内置 exec 命令行为的解释