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'有关?

除了“外部”之外还有什么其他原因,或者有什么方法可以查看我在 Xcode 中的代码有什么问题?

非常感谢你!

4

2 回答 2

6

它说当你编译时qam.cpp,你使用一个名为_Z12SNRFromSNRdBd(对应于SNRFromSNRdB(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 回答