为什么共享库路径在可执行文件中是硬编码的?

时间:2012-07-03 06:45:40

标签: c linux gcc

最近我得到了一个测试二进制文件。当我使用objdump检查它时,我发现它包含硬编码库路径。为什么需要对这样的路径进行硬编码?路径不应该取自SHELL环境变量或-L参数吗?

  

objdump -p testprog

输出包括共享库的硬编码路径:

....
  NEEDED      /home/test/lib/liba.so
  NEEDED      /home/test/lib/libb.so
  NEEDED      /home/test/lib/libc.so
....

1 个答案:

答案 0 :(得分:4)

这可能是因为这三个.so文件在构建测试程序的主机上没有SONAME。告诉构建它的人用liba.so重建-Wl,soname,liba.so和其他两个相似,然后重新链接主程序。