1

.h に宣言がなく、「extern」として宣言され、.cpp に実装されている以外に、「シンボル乗算定義」の理由はありますか?

すべてのファイルがルールに従っていると確信していますが、次のようなエラー メッセージが表示されます。

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 でコードの何が問題なのかを確認する方法はありますか?

どうもありがとうございました!

4

2 に答える 2

6

をコンパイルするときに、複数回定義されている(に対応する)qam.cppという名前のシンボルを使用すると書かれています。_Z12SNRFromSNRdBdSNRFromSNRdB(double)

その機能とそれを実装している人を検索する必要があります。

注:「マングルされた名前」から人間が読める形式に変換するには、 c++filt を使用できます

bruce@lorien:~$ c++filt _Z12SNRFromSNRdBd
SNRFromSNRdB(double)
于 2013-10-16T07:36:52.430 に答える
0

関連するコードを過去のものにしていただければ幸いです。それは明らかです。同様のエラーが発生しました。お役に立てば幸いです。これは、ah で宣言して ac で実装し、bc で呼び出す関数です。機能します。ac と bc を a.cpp と b.cpp に変更すると、正しくありません。その理由は、CPP が関数名をポリモーフィックに変更するためです。

于 2013-10-16T07:52:26.163 に答える