如何列出从.so文件导出的符号?如果可能的话,我也想知道它们的来源(例如,如果它们是从静态库中引入的).
我正在使用gcc 4.0.2,如果这有所不同.
这可能有什么问题?我有以下简单的类:
#include "libmnl/libmnl.h"
int main() {
struct mnl_socket *a = mnl_socket_open(12);
}
Run Code Online (Sandbox Code Playgroud)
运行简单的gcccompile(gcc -lmnl main.c)后,我得到以下错误:
/tmp/cch3GjuS.o: In function `main':
main.c:(.text+0xe): undefined reference to `mnl_socket_open'
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
在共享库上运行nm表明它实际上已找到:
aatteka@aatteka-Dell1:/tmp$ nm -D /usr/lib/libmnl.so | grep mnl_socket_open
0000000000001810 T mnl_socket_open
Run Code Online (Sandbox Code Playgroud)
这是在Ubuntu 12.04上发生的.该libmnl-dev的和libmnl0包安装.该strace输出gcc表明,ld使用正是*.so文件:
[pid 10988] stat("/usr/lib/gcc/x86_64-linux-gnu/4.6/libmnl.so", 0x7fff2a39b470) = -1 ENOENT (No such file or directory)
[pid 10988] open("/usr/lib/gcc/x86_64-linux-gnu/4.6/libmnl.so", O_RDONLY) = -1 ENOENT (No such file or …Run Code Online (Sandbox Code Playgroud)