我可以强制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
的工作实现。