【Linux】symbol lookup error: undefined symbol + nm指令定位错误

这篇具有很好参考价值的文章主要介绍了【Linux】symbol lookup error: undefined symbol + nm指令定位错误。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、undefined symbol错误
今天在运行模块执行文件时,出现了如下报错 "symbol lookup error"、"undefined symbol",提示 cos_getfile_mcd 可执行文件在加载 .so 文件时,出现了无法找到符号的错误,并给出了具体错误:_ZN20CCosGetfileTimerInfoC2Ev 符号未定义。

那么如何定位该错误呢?一般可以先使用 ldd指令 去查看一下可执行文件的链接库,但是我的可执行文件是在加载调用.so文件的过程中出现报错,ldd指令并没有解决我的问题,因此要用的nm指令来定位错误源。那么接着请往下看看 nm指令 介绍。

二、nm指令
1、nm指令的作用
nm命令主要是用来列出某些文件中的符号(说白了就是一些函数和全局变量等),后端程序员一般需要掌握该指令。

2、nm指令的参数
nm指令的参数如下:

# 指令使用格式
nm -xx [objfile...]
# 指令中的-xx即为如下参数列表
[-a|--debug-syms]
[-g|--extern-only] //只显示外部符号.
[-B] 
[-C|--demangle[=style]] 
[-D|--dynamic] 
[-S|--print-size] 
[-s|--print-armap] 
[-A|-o|--print-file-name] 
[-n|-v|--numeric-sort] 
[-p|--no-sort] 
[-r|--reverse-sort] [--size-sort] 
[-u|--undefined-only]    //只显示未定义的符号.
[-t radix|--radix=radix] //符号值得进制。d 十进制, o 八进制, x 十六进制.
[-P|--portability] 
[--target=bfdname] 
[-fformat|--format=format] //输出的格式,有"bsd","sysv" 或"posix"可选。默认是“bsd”
[--defined-only]    //只显示已定义的符号.
[-l|--line-numbers] //对每一个符号,使用调试信息去查找文件名和行号
[--no-demangle] 
[-V|--version] 
[-X 32_64] 
[--help]  //显示帮助

3、nm指令输出
nm命令的输出包含三个部分:1)符号值,默认显示十六进制,也可以指定; 2 )符号类型,小写表示本地符号,大写表示全局符号(external),符号类型介绍如下所示;3)符号名称,符号名称前后分别会加上一段拓展名,代表不同的符号类型,例如后面的扩展名D1EV是指的C++析构函数。

A:符号值是绝对的。在进一步的连接中,不会被改变
B:符号位于未初始化数据段(BSS)
C:共用(common)符号. 共用符号是未初始化的数据。在连接时,多个共用符号可能采用一个同样的名字,如果这个符号在某个地方被定义,共用符号被认为是未定义的引用
D:已初始化数据段的符号
G:已初始化数据段中的小目标(small objective)符号. 一些目标文件格式允许更有效的访问小目标数据,比如一个全局的int变量相对于一个大的全局数组
I:其他符号的直接应用,这是GNU扩展的,很少用
N:调试符号
R:只读数据段符号
S:未初始化数据段中的小目标(small object)符号
T:代码段的符号
U:未定义符号
V:弱对象(weak object)符号. 当一个已定义的弱符号被连接到一个普通定义符号,普通定义符号可以正常使用,当一个未定义的弱对象被连接到一个未定义的符号,弱符号的值为0
W:一个没有被指定一个弱对象符号的弱符号(weak symbol)
-:a.out目标文件中的刺符号(stabs symbol). 这种情况下,打印的下一个值是其他字段,描述字段,和类型。刺符号用于保留调试信息
?:未知符号类型,或者目标文件特有的符号类型

参考:【Linux】symbol lookup error: undefined symbol + nm指令定位错误_Captain_zw的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-719258.html

到了这里,关于【Linux】symbol lookup error: undefined symbol + nm指令定位错误的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包