调试“多重定义...”错误的一般技巧?

时间:2015-05-12 01:14:19

标签: c++ c debugging

我正在寻找一般调试“技巧”来查找此类错误消息的源问题:

build/nat.cpp.o:(.bss+0x0): multiple definition of `input::helloCounter'
build/sam.cpp.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status

这里,input :: helloCounter是一个在头文件中定义的全局变量,但头文件有ifndef...的保护。

在这里粘贴源应该是没有意义的,因为有太多。但我想知道在这种情况下你是否有一些通用的调试技术,例如,插入一些特殊代码以便揭露问题?有关信息,我使用的是Ubuntu 14.04,Clang / g ++作为编译器。

1 个答案:

答案 0 :(得分:3)

这主要是特定于实现的问题。您没有指定正在使用的编译器或操作系统,因此无法提供特定于您的平台的帮助。但是,例如,在Linux上的类似情况下,我将使用nm(1)中的binutils工具搜索所有目标代码文件以查找定义符号的文件,找到定义的所有目标代码文件它,并确定哪些不应该定义它。

一旦知道哪个目标代码文件的定义不应该存在,就可以检查相应的源文件,以确定它是如何编译的。

我确信无论您使用何种编译器或操作系统,它都必须具有可以相同方式使用的类似工具。