Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
最近我得到了一个测试二进制文件。当我使用 objdump 检查它时,我观察到它包含硬编码的库路径。为什么需要像这样对路径进行硬编码?路径不应该取自 SHELL 环境变量或 -L 参数吗?
objdump -p 测试程序
输出包括共享库的硬编码路径:
.... NEEDED /home/test/lib/liba.so NEEDED /home/test/lib/libb.so NEEDED /home/test/lib/libc.so ....
这可能是因为这三个.so文件在构建测试程序的主机上没有 SONAME。告诉构建它的人用其他两个类似的方式重建它liba.so,-Wl,soname,liba.so然后重新链接主程序。
.so
liba.so
-Wl,soname,liba.so