Неопределенный символ ___gxx_personality_v0 в ссылке - PullRequest
49 голосов
/ 15 октября 2008

Я получил это неопределенное здание символов с этой командной строкой:

$ gcc test.cpp
Undefined symbols:
  "___gxx_personality_v0", referenced from:
  etc...

test.cpp прост и должен прекрасно работать. Что такое сделка?

Ответы [ 4 ]

77 голосов
/ 15 октября 2008

Используйте

g++ test.cpp

вместо этого, поскольку это код C ++.


Или, если вы действительно хотите использовать gcc, добавьте -lstdc++ в командную строку, например, так:

gcc test.cpp -lstdc++

Выполнение md5 против a.out, созданного в каждом сценарии, показывает, что это тот же результат.

Но, да, g++, вероятно, делает ваш мир проще.

4 голосов
/ 26 октября 2009

Расширение .cpp заставляет gcc скомпилировать ваш файл как файл C ++. (См. 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 голосов
/ 03 декабря 2010

На всякий случай, если у кого-то есть такая же проблема, как у меня: расширение файла должно быть .c, а не .C (gcc чувствителен к регистру).

1 голос
/ 29 августа 2013

Была та же проблема, но другое решение:

Код C ++ в статической библиотеке становится связанным и на который ссылается файл .m. Переименование файла .m в .mm решило проблему.

...