ldconfig 无法链接到特定文件

jos*_*osh 4 ld

我ATLAS(使用 Netlib LAPACK)安装在 Docker 映像中,现在每次运行时ldconfig,都会出现以下错误:

ldconfig: Can't link /usr/local/lib//usr/local/lib/libtatlas.so to libtatlas.so
ldconfig: Can't link /usr/local/lib//usr/local/lib/libsatlas.so to libsatlas.so
Run Code Online (Sandbox Code Playgroud)

当然,/usr/local/lib//usr/local/lib/libtatlas.so不存在,但我很困惑为什么它会尝试查找这个文件,因为libtatlas.so它不是符号链接:

root@cd00953552ab:/usr/local/lib# ls -la | grep atlas
-rw-r--r-- 1 root staff 15242054 Apr 27 08:18 libatlas.a
-rwxr-xr-x 1 root staff 17590040 Apr 27 08:18 libatlas.so
-rwxr-xr-x 1 root staff 17492184 Apr 27 08:18 libsatlas.so
-rwxr-xr-x 1 root staff 17590040 Apr 27 08:18 libtatlas.so
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,有没有办法修复它/关闭此错误消息?

编辑:这是 Readelf 输出:

root@cd00953552ab:/usr/local/lib# eu-readelf -a /usr/local/lib/libatlas.so | grep SONAME
  SONAME            Library soname: [/usr/local/lib/libtatlas.so]
Run Code Online (Sandbox Code Playgroud)

Ste*_*itt 5

由于某种原因,可能与库的构建方式(更具体地说,链接)有关,它们\xe2\x80\x99将安装目录存储在其soname中:因此libtatlas.so\xe2\x80\x99s soname是/usr/local/lib/libtatlas.so. ldconfig尝试将库链接到它们的 soname(如果 \xe2\x80\x99t 不存在),在同一目录中:它找到,检查其 soname,确定需要从(目录和 soname 连接)到/usr/local/lib/libtatlas.so建立链接,并且失败,因为\xe2\x80\x99 不存在。/usr/local/lib//usr/local/lib/libtatlas.so/usr/local/lib/libtatlas.so/usr/local/lib/usr/local/lib

\n\n

解决此问题的适当方法是确保正确定义libraries\xe2\x80\x99 sonames。通常 I\xe2\x80\x99d 期望libtatlas.so.3等没有目录名称(版本将取决于正在构建的库的 ABI 级别)。您可能需要重建库,或者找到正确构建的包......

\n\n

或者,您可以使用PatchELF编辑library\xe2\x80\x99s soname :

\n\n
patchelf --set-soname libtatlas.so /usr/local/lib/libtatlas.so\n
Run Code Online (Sandbox Code Playgroud)\n\n

理想情况下,您应该重新链接使用此库构建的程序,因为它们\xe2\x80\x99也将嵌入soname(您也可以使用PatchELF对其进行修补)。

\n\n

在不断发展的系统中,您\xe2\x80\x99d确实想在soname中指定版本,但在容器中它可能并不重要\xe2\x80\x99d \xe2\x80\x94您应该重建容器以进行升级反正。

\n