有一个可执行文件动态链接到共享对象的数量。我如何确定某个符号(导入可执行文件)属于其中的哪一个?
如果有不止一种可能性,我可以模拟 ld 并查看它是从哪里拍摄的吗?
除了查理提到的那些,“ ldd ”可能会做一些你正在寻找的事情。
如果您可以重新链接可执行文件,找出引用和定义来自何处的最简单方法是使用ld
-y
标志。例如:
$ cat t.c
int main() { printf("Hello\n"); return 0; }
$ gcc t.c -Wl,-yprintf
/lib/libc.so.6: definition of printf
如果您无法重新链接可执行文件,请ldd
在其上运行,然后'nm -D'
在按顺序列出的所有库上运行,并grep
针对您感兴趣的符号运行。
$LD_DEBUG=bindings my_program
这将在控制台上打印所有符号绑定。