【发布时间】:2014-08-21 10:58:30
【问题描述】:
我有一个我正在从源代码构建的 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 上运行有明显的原因吗?
【问题讨论】:
-
ldd是递归的:它列出可执行文件所链接的库、这些库所链接的库、那些库所链接的库,等等.ld自己什么都不选择,它链接了它被告知的内容。 -
另请参阅this related question 和所有答案。
-
libcrypto 已经定义了一切。您应该运行 nm --defined-only .../libcrypto... 和 nm -u
-
我已经编辑了我的答案
-
如果您想查看符号,可以使用
nm -D。我不知道你为什么想要。符号与原始问题无关。您的可执行文件与您传递给链接器的库完全链接,不多也不少。
标签: linux shared-libraries ld ldd