1

我可以强制ld链接到未版本化的 .so 文件吗?

在 linux 下,当我将 C++ 程序链接到共享库时,它将绑定到版本化的 .so 文件,这通常是一个非常好的主意。例如,如果我用

g++ main.cxx -l somelib

然后检查

ldd ./a.out

它会打印出类似的东西

libsomelib.so.1 => /xxxx/somelib/libsomelib.so.1

由于其他地方的系统损坏,此文件安装在目标中,libsomelib.so而不是像通常那样libsomelib.so.1使用符号链接。我无法更改此设置,因此作为一种解决方法,我想更改我的 makefile 以链接到未版本化的 .so 文件。(二进制兼容性在这里不是问题,因为一切都在受控环境中)。

4

1 回答 1

1

通过阅读 ld 手册,这似乎是不可能的。我建议在事后使用 patchelf 来修复它,例如patchelf --replace-needed libsomelib.so.1 libsomelib.so a.out. 请注意,最新发布的 patchelf 0.9 版本存在错误,您需要从源代码编译 patchelf master 以获得--replace-needed.

于 2019-08-05T14:56:51.227 回答