如何处理C ++ / GNU工具链中的链接器错误?

时间:2010-02-19 19:46:01

标签: c++ debugging gcc linker

鉴于C ++ / GNU工具链,解决链接器错误的好方法或工具或策略是什么?

4 个答案:

答案 0 :(得分:2)

不确定您的意思,但如果您正在谈论隐秘的链接符号,如:

mylib.so:未定义的符号:_ZN5CandyD2Ev

你可以使用c ++ filt为你做一些令人费解的事。

c ++ filt _ZN5CandyD2Ev

将返回Candy :: ~Candy(),因此不知何故,Candy的析构函数没有被链接。

答案 1 :(得分:1)

第一件事就是RTFM。不,严肃地说,阅读文档。

如果您不想这样做,请尝试搜索出现的错误。

以下是一些需要记住的事项:“缺失”符号通常表示您没有包含相应的源或库; “缺失”符号有时表示您正在尝试链接使用不同的修改约定(或不同的编译器)创建的库;确保在适当的时候有外部“C”;宣告和定义不是一回事;如果您的编译器不支持“导出”,请确保在实例化对象时可以使用模板代码。

答案 2 :(得分:1)

使用gcc工具链,我使用:

  • nm:查找目标文件中的符号
  • ld:找到图书馆如何链接
  • c ++ filt:从其错位名称
  • 中查找符号的C ++名称

查看this了解详情。

答案 3 :(得分:0)

查看报告有问题的符号名称。

  • 如果报告缺少符号,请找出应在哪些源文件或库中定义函数/ ...。检查编译/链接器设置以找出未编译或链接这些文件的原因。
  • 如果存在多重定义的符号,则链接器通常会提到哪些目标文件或库包含它们。查看这些文件/它们的来源,找出为什么违规函数/ ......都包含在它们中。