我在Docker映像中安装了ATLAS (使用Netlib LAPACK),现在每次运行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当然,/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为什么会发生这种情况,是否有办法修复/关闭此错误消息?
编辑:这是Readelf输出:
root@cd00953552ab:/usr/local/lib# eu-readelf -a /usr/local/lib/libatlas.so | grep SONAME
SONAME Library soname: [/usr/local/lib/libtatlas.so]发布于 2017-04-27 09:26:25
由于某些原因,可能与库的构建方式有关(更具体地说,是链接的),它们将安装目录存储在自己的soname中:因此,libtatlas.so‘S奏鸣曲就是/usr/local/lib/libtatlas.so。ldconfig试图将库链接到它们的奏鸣曲(如果它不存在的话),在同一个目录中:它找到/usr/local/lib/libtatlas.so,检查它的soname,确定需要从/usr/local/lib//usr/local/lib/libtatlas.so (目录和soname连接的)链接到/usr/local/lib/libtatlas.so,但是由于/usr/local/lib/usr/local/lib不存在,所以失败了。
解决这一问题的适当方法是确保正确定义库的子名称。通常,我期望libtatlas.so.3等没有目录名(版本将取决于正在构建的库的ABI级别)。你可能需要重建库,或者找到一个正确的包.
或者,您可以使用PatchELF编辑库的奏鸣曲:
patchelf --set-soname libtatlas.so /usr/local/lib/libtatlas.so理想情况下,您应该重新链接使用这个库构建的程序,因为它们也会嵌入soname (您也可以使用PatchELF对其进行修补)。
在一个不断发展的系统中,您确实希望在soname中指定一个版本,但是在一个容器中,这可能并不重要--无论如何,您应该重新构建容器以进行升级。
https://unix.stackexchange.com/questions/361627
复制相似问题