除了没有.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中的代码有什么问题?
非常感谢!
答案 0 :(得分:5)
它说当你编译qam.cpp
时,你使用一个名为_Z12SNRFromSNRdBd
的符号(对应于SNRFromSNRdB(double)
),这个符号定义了不止一次。
您应该搜索该功能以及实施该功能的人。
注意:要将“受损名称”转换为人类可读,您可以使用c ++ filt
bruce@lorien:~$ c++filt _Z12SNRFromSNRdBd
SNRFromSNRdB(double)
答案 1 :(得分:0)
我希望您可以通过相关代码。这很清楚。 我得到了类似的错误,希望对你有所帮助。 这是一个函数我在a.h中声明并在a.c中实现,然后我在b.c中调用。它确实有效。如果我将a.c和b.c更改为a.cpp和b.cpp,那就错了。 原因是CPP将更改多态的函数名称。