




Использовать
g++ test.cpp
вместо этого, поскольку это код C++.
Или, если вы В самом деле хотите использовать gcc, добавьте -lstdc++ в командную строку, например:
gcc test.cpp -lstdc++
Запуск md5 против a.out, созданного в каждом сценарии, показывает, что это один и тот же результат.
Но да, g++, вероятно, сделает ваш мир проще.
@Pax Diablo: Да, он использует правильный компилятор, однако g ++ передает libstdC++ компоновщику, а gcc - нет. :-П
Да, это проблема компоновщика, а не компиляции. Обычно я не создаю отдельные файлы из командной строки таким образом, поэтому я даже не подумал и просто набрал gcc, думая, что это сработает.
Я сам совершил ту же ошибку, по крайней мере, дважды, что я могу вспомнить. :-)
Это не обязательно усталость или немота. Я вижу, что многие люди отвечают на использование g ++ вместо gcc, но это плохой ответ. У людей, которые спрашивают и ищут, может не быть такого выбора. Я работаю с библиотеками, имеющими версии C и C++, и пишу программу на C. Связывание с некоторыми из этих библиотек заставило меня привязаться к stdC++, и мне даже пришлось указать с помощью -L, где его найти внутри / usr / lib / gcc.
Не могу больше согласиться с divyzero, комбинирование C++ и C не является чем-то необычным. Может, ты самый тупой.
Работает для компиляции PHP 5.3 + fpm с EXTRA_CFLAGS = -lstdc++ в Makefile
Расширение .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 распознаются cpp. То же самое, например, в CMake.
Была та же проблема, но другое решение:
Код C++ в статической библиотеке связывается и на него ссылается файл .m. Переименование файла .m в .mm устранило проблему.
Я думал, что gcc - это интерфейс, который распознает файлы cpp и передает их правильному компилятору.