Компиляция программы на C++ с помощью gcc

Вопрос: Как скомпилировать программу на C++ с помощью компилятора gcc?

info.c:

#include<iostream>
using std::cout;
using std::endl;
int main()
{
   #ifdef __cplusplus
   cout << "C++ compiler in use and version is " << __cplusplus << endl;
   #endif
   cout <<"Version is " << __STDC_VERSION__ << endl;
   cout << "Hi" << __FILE__ << __LINE__ << endl;
}

и когда я пытаюсь скомпилировать info.c

$ gcc info.C

Undefined                       first referenced
 symbol                             in file
cout                                /var/tmp/ccPxLN2a.o
endl(ostream &)                     /var/tmp/ccPxLN2a.o
ostream::operator<<(ostream &(*)(ostream &))/var/tmp/ccPxLN2a.o
ostream::operator<<(int)            /var/tmp/ccPxLN2a.o
ostream::operator<<(long)           /var/tmp/ccPxLN2a.o
ostream::operator<<(char const *)   /var/tmp/ccPxLN2a.o
ld: fatal: Symbol referencing errors. No output written to a.out
collect2: ld returned 1 exit status

Разве компилятор gcc не способен компилировать программы на C++? На заметку о том, в чем разница между gcc и g++. Спасибо,

9 ответов

Решение

GCC действительно может скомпилировать код C++ просто отлично. Полученные вами ошибки - это ошибки компоновщика, а не ошибки компилятора.

Скорее всего, если вы измените строку компиляции так:

gcc info.C -lstdc++

что делает его ссылкой на стандартную библиотеку C++, тогда он будет работать просто отлично.

Однако вам следует просто упростить свою жизнь и использовать g ++.


РЕДАКТИРОВАТЬ:

Rup говорит, что лучше всего в своем комментарии к другому ответу:

[...] gcc выберет правильный внутренний компилятор на основе расширения файла (т.е. скомпилирует.c как C и.cc как C++) и по умолчанию связывает двоичные файлы только со стандартными вспомогательными библиотеками C и GCC независимо от того, языки ввода; g++ также выберет правильный бэкэнд, основанный на расширении, за исключением того, что я думаю, что вместо этого он компилирует весь исходный код C как C++ (то есть компилирует и.c, и.cc как C++) и включает libstdC++ в свой шаг ссылки независимо от языков ввода.

Если вы дадите коду расширение.c, компилятор думает, что это код на C, а не на C++. А драйвер компилятора C++ называется g ++, если вы используете драйвер gcc, у вас будут проблемы с компоновщиком, так как стандартные библиотеки C++ не будут связаны по умолчанию. Итак, вы хотите:

g++ myprog.cpp

И даже не рассматривайте возможность использования расширения.C в верхнем регистре, если только вы никогда не захотите переносить свой код и готовы быть ненавидимыми теми, с кем работаете.

Использование g++ вместо gcc,

По умолчанию gcc выбирает язык на основе расширения файла, но вы можете заставить gcc выбрать другой языковой бэкэнд с опцией -x, таким образом:

gcc -x c++

Дополнительные параметры подробно описаны на странице руководства gcc в разделе "Параметры, управляющие типом вывода". Смотрите, например, http://linux.die.net/man/1/gcc (поиск на странице для текста -x language).

Эта возможность очень полезна в тех случаях, когда gcc не может угадать язык, используя расширение файла, например, если вы генерируете код и передаете его в gcc через stdin.

Разница между gcc и g++:

     gcc            |        g++
compiles c source   |   compiles c++ source

используйте g++ вместо gcc для компиляции исходного кода C++.

Если я правильно помню, gcc определяет тип файла по суффиксу. Итак, сделайте это foo.cc, и он должен работать.

И, чтобы ответить на ваш другой вопрос, это разница между "gcc" и "g++". gcc - это интерфейс, который выбирает правильный компилятор.

Обновление с моей версией GCC 10.3.0 на Ubuntu. Даже если я добавлю -lstdc++или используйте правильное расширение, cc1plusдолжен быть установлен в системе. В противном случае появляется эта ошибка:

gcc: фатальная ошибка: невозможно выполнить «cc1plus»: execvp: нет такого файла или каталога

Один из способов получить это - установить g++даже если вы не собираетесь использовать его напрямую, например sudo apt install g++.

Теперь, если я использую расширение, я могу просто звонить напрямую, однако предупреждения и ошибки все еще появляются. Использовать gccчисто, с расширением я должен называть это так:

      gcc -x c++ info.c -lstdc++

Короче, если я использую расширение, как принятый ответ:

      gcc info.cc -lstdc++

Или, как говорили другие, просто используйте g++ info.cвместо. Никаких дополнительных параметров для указания C++ не требуется, и он работает с .c, .ccа также .cppрасширения.

Это хорошо сработало для меня. Всего одна строка кода в cmd.

Сначала убедитесь, что вы установили компилятор gcc (для c) или g ++ (для C++).

В cmd для типа gcc:

gcc - версия

в cmd для типа g ++:

g ++ - версия

Если он установлен, продолжайте.

Теперь скомпилируйте ваш.c или.cpp, используя cmd

для синтаксиса .c:

gcc -o exe_filename yourfilename.c

Пример:

gcc -o myfile myfile.c

Здесь exe_filename (myfile в примере) - это имя вашего.exe файла, который вы хотите создать после компиляции (примечание: я не добавил здесь никакого расширения). И yourfilename.c (myfile.c в примере) - это ваш исходный файл с расширением.c.

Теперь перейдите в папку, содержащую ваш файл.c, здесь вы найдете файл с расширением.exe. Просто открой его. Ура..

Для синтаксиса .cpp:

g ++ -o exe_filename yourfilename.cpp

После этого процесс такой же, как и для.c.

для файла .cpp:

                g++ myprog.cpp -o myprog
Другие вопросы по тегам