Возможные причины множественного определения символа, отличного от 'extern'

0

Существуют ли какие-либо причины для "символа, умноженного на несколько значений", кроме того, что он не имеет объявления в.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?

Большое спасибо!

Теги:
xcode
build
extern

2 ответа

5
Лучший ответ

он говорит, что когда вы компилируете qam.cpp, вы используете символ с именем _Z12SNRFromSNRdBd (соответствующий SNRFromSNRdB(double)), который определен более одного раза.

Вы должны искать эту функцию и кто ее реализует.

Примечание. Чтобы преобразовать из "искаженного имени" в человекообразное, вы можете использовать С++ filter

bruce@lorien:~$ c++filt _Z12SNRFromSNRdBd
SNRFromSNRdB(double)
  • 0
    Спасибо! это точно проблема, я определил одну и ту же функцию SNRFromSNRdB (double) дважды в 2 разных файлах.
0

Надеюсь, вы сможете пропустить свой код. Это понятно. Я получил подобную ошибку, надеюсь, может вам помочь. Это функция, которую я объявляю в ah и реализую в ac, затем я вызываю в bc. Это действительно работает. Если я изменил переменные ac и bc на a.cpp и b.cpp, это неправильно. Причина в том, что CPP изменит ваше имя функции на полиморфное.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню