2013-10-16 31 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會改變你的多態函數名稱。

相關問題