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