最近我得到了一个测试二进制文件。当我使用objdump检查它时,我发现它包含硬编码库路径。为什么需要对这样的路径进行硬编码?路径不应该取自SHELL环境变量或-L参数吗?
objdump -p testprog
输出包括共享库的硬编码路径:
....
NEEDED /home/test/lib/liba.so
NEEDED /home/test/lib/libb.so
NEEDED /home/test/lib/libc.so
....
答案 0 :(得分:4)
这可能是因为这三个.so
文件在构建测试程序的主机上没有SONAME。告诉构建它的人用liba.so
重建-Wl,soname,liba.so
和其他两个相似,然后重新链接主程序。