C++ 除'外定义符号乘法的可能原因;外部';
“symbol multiply defined”除了在.h中没有声明、将其作为“extern”并在.cpp中实现之外,还有什么其他原因吗 我很确定我的所有文件都遵循规则,但我收到的错误消息如下:C++ 除'外定义符号乘法的可能原因;外部';,c++,c,xcode,build,extern,C++,C,Xcode,Build,Extern,“symbol multiply defined”除了在.h中没有声明、将其作为“extern”并在.cpp中实现之外,还有什么其他原因吗 我很确定我的所有文件都遵循规则,但我收到的错误消息如下: ld: lto: could not merge in /Users/zlw/Library/Developer/Xcode/DerivedData/Wireless - amjmgyrircjezdhegioctszbcypz/Build/Intermediates/Wireless.build
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++过滤器
bruce@lorien:~$ c++filt _Z12SNRFromSNRdBd
SNRFromSNRdB(double)
它说,当您编译
qam.cpp
时,您使用了一个名为Z12SNRFromSNRdBd
(对应于SNRFromSNRdB(double)
)的符号,该符号被多次定义
您应该搜索该函数以及谁在实现它
注意:要将“损坏的名称”转换为人类可读的名称,可以使用c++过滤器
bruce@lorien:~$ c++filt _Z12SNRFromSNRdBd
SNRFromSNRdB(double)
我希望你能通过你的相关代码。这是清楚的。 我犯了类似的错误,希望能对你有所帮助。 这是一个我在A.h中声明并在A.c中实现的函数,然后我在b.c中调用。它确实起作用。如果我将a.c和b.c更改为a.cpp和b.cpp,则是错误的。
原因是CPP会将您的函数名更改为多态。我希望您能跳过相关代码。这是清楚的。 我犯了类似的错误,希望能对你有所帮助。 这是一个我在A.h中声明并在A.c中实现的函数,然后我在b.c中调用。它确实起作用。如果我将a.c和b.c更改为a.cpp和b.cpp,则是错误的。
原因是CPP将更改您的多态函数名。谢谢!这正是问题所在,我已经在两个不同的文件中两次定义了相同的函数SNRFromSNRdB(double)。谢谢!这正是问题所在,我在两个不同的文件中两次定义了相同的函数SNRFromSNRdB(double)。