在Linux系统中,查看动态库(共享库)中的符号可以通过nm
命令来实现。符号表是程序中定义和引用的函数、变量等标识符的集合,它们在编译链接过程中起着关键作用。
使用nm
命令可以列出目标文件或动态库中的符号信息。
nm -D [库文件]
-D
选项表示显示动态符号表。假设有一个名为libexample.so
的动态库,要查看其中的符号,可以执行:
nm -D libexample.so
输出结果会列出库中的符号及其类型。常见的符号类型包括:
T
:表示该符号在文本段中定义。U
:表示该符号未定义,在链接时需要从其他目标文件或库中解析。D
:表示该符号在数据段中定义。可能的原因包括:
解决方法:
ldd
命令查看程序依赖的库是否正确:ldd
命令查看程序依赖的库是否正确:__attribute__((visibility("default")))
显式导出符号。假设有一个简单的动态库libexample.so
,其中定义了一个函数void print_hello()
。
库源代码(example.c):
#include <stdio.h>
void print_hello() {
printf("Hello, World!\n");
}
编译生成动态库:
gcc -shared -fPIC -o libexample.so example.c
查看动态库符号:
nm -D libexample.so
输出可能类似于:
0000000000001139 T print_hello
这表明print_hello
函数在动态库中已定义。
通过这种方式,可以有效地管理和调试Linux系统中的动态库符号。
领取专属 10元无门槛券
手把手带您无忧上云