【发布时间】:2014-05-29 13:42:20
【问题描述】:
我有一组安装在 Linux 机器上的二进制文件。它们需要libgfortran 库,但在执行时会显示以下消息:
error while loading shared libraries: libgfortran.so.2: cannot open shared object file: No such file or directory
机器已经安装了libgfortran,但是库文件的名称是libgfortran.so.1.0.0(和libgfortran.so.1链接到它)。
令我惊讶的是,只需将libgfortran.so.2 与libgfortran.so.1 建立一个符号链接,如下所示:
ln -s /usr/lib64/libgfortran.so.1 /usr/lib64/libgfortran.so.2
这解决了我的问题,并且二进制文件能够运行,显然没有错误。
我的问题是——他们为什么还要跑呢?
是否没有内置机制来检测 API 版本何时不同,还是仅基于文件名?
如果有 API 检测 - 那么应该没有符号错误吗?
确实,如果库之间具有不同的主要版本实际上是兼容的,那么它们的目的是什么?
(回答者注意:我的问题不是关于libgfortran,这只是一个说明性的例子。)
【问题讨论】:
标签: linux versioning elf shared-libraries