Неопределенный символ ___gxx_personality_v0 по ссылке
Вопрос
Я получаю это неопределенное здание символа с помощью этой командной строки:
$ gcc test.cpp
Undefined symbols:
"___gxx_personality_v0", referenced from:
etc...
test.cpp прост и должен работать нормально.В чем дело?
Решение
Использовать
g++ test.cpp
вместо этого, поскольку это код C++.
Или, если вы Действительно хочу использовать gcc
, добавлять -lstdc++
в командную строку, вот так:
gcc test.cpp -lstdc++
Бег md5
против a.out
полученные по каждому сценарию, показывают, что это один и тот же результат.
Но да, g++
вероятно, делает ваш мир проще.
Другие советы
А .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
символ присутствует.)
На всякий случай у кого-то такая же проблема, как у меня:Расширение файла должно быть .c
не .C
(gcc чувствителен к регистру).
Была та же проблема, но другое решение:
Код C++ в статической библиотеке связывается и на него ссылается файл .m.Переименование файла .m в .mm устранило проблему.