我有一个从源代码构建的 Linux 应用程序。当我对二进制文件运行 ldd 时,我理解了大部分库......但不是全部。
有没有办法向 ld 或 gcc/g++ 添加标志或我可以做的任何事情来确定链接器为什么选择链接到特定库?
编辑:
为了探索@shloim 设置的路线,我尝试了以下方法:
> nm -u /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
nm: /lib/x86_64-linux-gnu/libcrypto.so.1.0.0: no symbols
> file /lib/x86_64-linux-gnu/libcrypto.so.1.0.0
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=230ebe6145b6681d0cb7e4c9021f0d899c02e0c4, stripped
nm
不能在 libcrypto 上运行是否有明显的原因?
最佳答案
这应该会向您显示所有在 so 文件中使用但在 so 中 undefined symbol :
nm -u <your_so_file>
然后你可以将它与
nm --defined-only <3rd_party_so_file>
并尝试找出常用符号
关于linux - 如何确定为什么动态库链接到应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25424604/