首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ldconfig无法链接到特定文件

ldconfig无法链接到特定文件
EN

Unix & Linux用户
提问于 2017-04-27 09:05:41
回答 1查看 2.8K关注 0票数 4

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

代码语言:javascript
复制
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不是一个符号链接:

代码语言:javascript
复制
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输出:

代码语言:javascript
复制
root@cd00953552ab:/usr/local/lib# eu-readelf -a /usr/local/lib/libatlas.so | grep SONAME
  SONAME            Library soname: [/usr/local/lib/libtatlas.so]
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2017-04-27 09:26:25

由于某些原因,可能与库的构建方式有关(更具体地说,是链接的),它们将安装目录存储在自己的soname中:因此,libtatlas.so‘S奏鸣曲就是/usr/local/lib/libtatlas.soldconfig试图将库链接到它们的奏鸣曲(如果它不存在的话),在同一个目录中:它找到/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编辑库的奏鸣曲:

代码语言:javascript
复制
patchelf --set-soname libtatlas.so /usr/local/lib/libtatlas.so

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

在一个不断发展的系统中,您确实希望在soname中指定一个版本,但是在一个容器中,这可能并不重要--无论如何,您应该重新构建容器以进行升级。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/361627

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档