我可以强制ld链接到一个未版本的.so文件吗?
在Linux下,当我将C++程序链接到一个共享库时,它将被绑定到版本化的.so文件,这通常是一个很好的主意。例如,如果我用

g++ main.cxx -l somelib

然后检查
ldd ./a.out

它会打印出
libsomelib.so.1 => /xxxx/somelib/libsomelib.so.1

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

最佳答案

从阅读LD手册来看,这似乎是不可能的。我建议在事后使用patchelf修复它,例如patchelf --replace-needed libsomelib.so.1 libsomelib.so a.out。请注意,patchelf 0.9的最新版本有错误,您需要从源代码处编译patchelf master才能获得--replace-needed的工作实现。

10-07 16:26