2013-10-16 30 views
0

除了在.h中声明为'extern',并且在.cpp中实现之外,是否有任何原因符号乘法定义?除'extern'之外的符号乘法定义的可能原因

我敢肯定,我所有的文件都遵循规则,但我发现了这样的错误消息:

ld: lto: could not merge in /Users/zlw/Library/Developer/Xcode/DerivedData/Wireless - 
amjmgyrircjezdhegioctszbcypz/Build/Intermediates/Wireless.build/Debug/Wireless.build/Objects 
normal/x86_64/qam.o because 'Linking globals named '_Z12SNRFromSNRdBd': symbol multiply 
defined!', using libLTO version 'LLVM version 3.3svn, from Apple Clang 5.0 (build 
500.2.76)' for architecture x86_64 

clang: error: linker command failed with exit code 1 (use -v to see invocation) 

邮件是否意味着所有的烦恼都事做“QAM .h'或'qam.cpp'?

是否有任何其他原因'extern'或有什么方法可以看到我的代码在Xcode中出了什么问题?

非常感谢!

回答

5

它表示当您编译qam.cpp时,您使用一个名为_Z12SNRFromSNRdBd(对应于SNRFromSNRdB(double))的符号,该符号定义了多次。

您应该搜索该功能以及谁正在实施它。

注:从“错位的名称”转换为人类可读的,你可以使用C++ filt的

[email protected]:~$ c++filt _Z12SNRFromSNRdBd 
SNRFromSNRdB(double) 
+0

谢谢!正是这个问题,我在两个不同的文件中定义了两次相同的函数SNRFromSNRdB(double)。 – Lewen

0

我希望你能过去的相关代码。这很清楚。 我得到了类似的错误,我希望可以帮助你。 这是一个函数我在a.h中声明并在a.c中实现,然后我在b.c中调用它确实有效。如果我将a.c和b.c更改为a.cpp和b.cpp,那就错了。 原因是CPP会改变你的多态函数名称。

相关问题