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

Lun*_*oms 4 c linux gcc

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

objdump -p 测试程序

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

....
  NEEDED      /home/test/lib/liba.so
  NEEDED      /home/test/lib/libb.so
  NEEDED      /home/test/lib/libc.so
....
Run Code Online (Sandbox Code Playgroud)

Ala*_*rry 5

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