Undefined Символ ___gxx_personality_v0 по ссылке
Я получил это построение символа undefined с помощью этой командной строки:
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
test.cpp прост и должен прекрасно работать. Какая сделка?
Ответы
Ответ 1
Использование
g++ test.cpp
вместо этого, так как это код С++.
Или, если вы действительно хотите использовать gcc
, добавьте -lstdc++
в командную строку, например:
gcc test.cpp -lstdc++
Выполнение md5
по отношению к a.out
, создаваемому по каждому сценарию, показывает, что он имеет тот же результат.
Но, да, g++
, вероятно, делает ваш мир более простым местом.
Ответ 2
Расширение .cpp
вызывает gcc
, чтобы скомпилировать ваш файл как файл С++. (См. Документы GCC.)
Попробуйте выполнить компиляцию одного и того же файла, но переименуйте его с расширением .c
:
mv test.cpp
gcc test.c
В качестве альтернативы вы можете явно указать язык, передав -x c
компилятору:
gcc -x c -c test.cpp -o test.o
Если вы запустите nm test.o
в этих версиях на языке C, вы заметите, что ___gxx_personality_v0
не указан в качестве символа.
(И если вы выполняете ту же команду в объектном файле, сгенерированном с помощью gcc -c test.cpp -o test.o
, присутствует символ ___gxx_personality_v0
.)
Ответ 3
На всякий случай у меня есть такая же проблема, как и я: расширение файла должно быть .c
not a .c
(gcc чувствителен к регистру).
Ответ 4
Имела ту же проблему, но другое решение:
С++-код в статической библиотеке, связанный и ссылающийся на файл .m. Переименование файла .m в .mm исправило проблему.