linux命令之查看动态库符号-nm

来源:互联网 发布:tomcat centos 编辑:程序博客网 时间:2024/06/06 15:53

在调用动态库的时候,经常出现由于动态库接口修改或者版本不匹配导致调用动态库找不到函数接口符号的情况。

原因可能有如下几种:

1.由于c++动态库编译没有加extern c导致函数编译时加了c++的前缀的;

2.系统中有多个库,程序加载了其他路径的库;

3.库的版本不对,老版本的库确实没有新加的接口。

这个时候就可以用nm命令看so中是否有提示找不到的符号。

输入nm -h查看nm的选项如下:

用法:nm [选项] [文件] 列举 [文件] 中的符号 (默认为 a.out)。 The options are:  -a, --debug-syms       Display debugger-only symbols  -A, --print-file-name  Print name of the input file before every symbol  -B                     Same as --format=bsd  -C, --demangle[=STYLE] Decode low-level symbol names into user-level names                          The STYLE, if specified, can be `auto' (the default),                          `gnu', `lucid', `arm', `hp', `edg', `gnu-v3', `java'                          or `gnat'      --no-demangle      Do not demangle low-level symbol names  -D, --dynamic          Display dynamic symbols instead of normal symbols      --defined-only     Display only defined symbols  -e                     (ignored)  -f, --format=FORMAT    Use the output format FORMAT.  FORMAT can be `bsd',                           `sysv' or `posix'.  The default is `bsd'  -g, --extern-only      Display only external symbols  -l, --line-numbers     Use debugging information to find a filename and                           line number for each symbol  -n, --numeric-sort     Sort symbols numerically by address  -o                     Same as -A  -p, --no-sort          Do not sort the symbols  -P, --portability      Same as --format=posix  -r, --reverse-sort     Reverse the sense of the sort      --plugin NAME      Load the specified plugin  -S, --print-size       Print size of defined symbols  -s, --print-armap      Include index for symbols from archive members      --size-sort        Sort symbols by size      --special-syms     Include special symbols in the output      --synthetic        Display synthetic symbols as well  -t, --radix=RADIX      Use RADIX for printing symbol values      --target=BFDNAME   Specify the target object format as BFDNAME  -u, --undefined-only   Display only undefined symbols  -X 32_64               (ignored)  @FILE                  Read options from FILE  -h, --help             Display this information  -V, --version          Display this program's version numbernm:支持的目标: elf64-x86-64 elf32-i386 elf32-iamcu elf32-x86-64 a.out-i386-linux pei-i386 pei-x86-64 elf64-l1om elf64-k1om elf64-little elf64-big elf32-little elf32-big pe-x86-64 pe-bigobj-x86-64 pe-i386 plugin srec symbolsrec verilog tekhex binary ihex将 bug 报告到 <http://www.sourceware.org/bugzilla/>。


原创粉丝点击