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

标签 linux linker makefile gnu-make

运行时:

    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/

相关文章:

c - Makefile - 如何在服务器之后同时运行客户端?

c++ - 安装 kumofs 时出错

linux - dd 命令错误,其大小大于 VMWARE 中分配的大小

ffmpeg - 为什么 ffmpeg 链接的库太多?

ios - 尝试构建一个支持 iPhone5 (armv7s) 的 iOS 库

gcc - 如何在CMakeLists.txt中设置LDFLAGS?

c# - 如何在 Linux 上用 C# 启动服务

java - ubuntu 中的 Java 1.6 配置期间加载共享库时出错

Linux 上的 Java 内存使用情况

c++ - 我可以在忽略 Qt 的打包库的同时编译 Qt 应用程序吗?