除了没有在.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中的代码出了什么问题?

非常感谢你!

最佳答案

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

您应该搜索该功能及其实现者。

注意:要将“名称混杂”转换为可读的格式,可以使用c++ filt

bruce@lorien:~$ c++filt _Z12SNRFromSNRdBd
SNRFromSNRdB(double)

10-04 13:45