linux - 如何确定为什么动态库链接到应用程序?

标签 linux shared-libraries ld ldd

我有一个从源代码构建的 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/

相关文章:

c - 未找到输入符号

compiler-errors - NDK 静态库项目无法为 arm64-v8a 编译

python - 无法使用 pip 安装 scitools-iris : ImportError No module named target_pkg (in pyke)

linux - 着色尾输出 bash

websphere - 将共享库附加到 WebSphere 应用程序的模块

angular - 如何在库 angular 中使用 scss 文件创建组件

linux - Crontab 在半点开始

python - pypyodbc 在 isql 连接时不连接?

java - 有没有可以用JAVA运行的城市词典或者俚语词典?

c - 如何防止隐式链接描述文件更改部分的 LMA