相关疑难解决方法(0)

如何在.so文件中列出符号

如何列出从.so文件导出的符号?如果可能的话,我也想知道它们的来源(例如,如果它们是从静态库中引入的).

我正在使用gcc 4.0.2,如果这有所不同.

c c++ gcc symbols name-mangling

444
推荐指数
10
解决办法
34万
查看次数

未定义的符号引用,即使nm表示此符号存在于共享库中

这可能有什么问题?我有以下简单的类:

#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)

linux linker gcc shared-libraries

27
推荐指数
1
解决办法
1万
查看次数

标签 统计

gcc ×2

c ×1

c++ ×1

linker ×1

linux ×1

name-mangling ×1

shared-libraries ×1

symbols ×1