c – 查找导致未定义引用错误的源代码行
迟早在C/C++编程时,每个人都将面临“未定义的参考错误”.
通常这是由缺少的库引起的,并且大多数错误在几秒钟内通过链接缺少的库来修复. 我很好奇: 解决方法
正如我在回答
this question时提到的那样,是否直接得到导致链接错误的行号取决于编译器是否发出了所有必要的信息.
首先,这些是我遇到的导致您所看到的行为的情况: >编译器发出错误的调试信息(solaris studio 12.3在某些情况下进行调试/优化) >堆栈保护器 如果您有类似的链接错误,我建议跟踪它可能会有所帮助: asdf.o: In function `whatever': asdf.o(.text+0x1238): undefined reference to `fdsa' …因为至少你有一个地址可以使用. 首先,尝试addr2line: ~ addr2line -e asdf.o 0x1238 # If it works,you'll get: asdf.cc:N # If it doesn't work,you'll get: ??:? 如果做不到这一点,试试objdump: ~ objdump --dwarf=decodedline asdf.o asdf.o: file format elf64-x86-64 Decoded dump of debug contents of section .debug_line: CU: asdf.cc: File name Line number Starting address asdf.cc 1 0x1234 asdf.cc 3 0x1254 asdf.cc 5 0x1274 在我给出的完全构造的示例中,.debug_line中没有对应于0x1238的条目(链接器错误中的地址),因此它可能是编译器魔术(例如,通过堆栈保护器或清理程序添加的额外代码) ),或者希望它与第1/3行发生的任何事情有关,因为地址在这两行之间. 如果这不足以让你继续下去:当我想再继续下去时,我做了以下事情: >插入一个链接标志以阻止它进行解码以获取受损的符号 假设程序集注释得很好,那么从objdump程序集关联丢失的符号信息并不是非常困难,并且至少可以修复代码行以启动其余的搜索(假设你还有更多的兔子洞)像STL一样经常下去. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |