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 исправило проблему.