Компиляция программы на C ++ с помощью gcc - PullRequest
60 голосов
/ 05 июля 2010

Вопрос: Как скомпилировать программу на 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 ++. Спасибо,

Ответы [ 7 ]

103 голосов
/ 08 июля 2010

GCC может на самом деле прекрасно скомпилировать код C ++.Вы получили следующие ошибки: linker , а не ошибки компилятора.

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

gcc info.C -lstdc++

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

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


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

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

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

36 голосов
/ 05 июля 2010

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

g++ myprog.cpp

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

18 голосов
/ 05 июля 2010

используйте g++ вместо gcc.

10 голосов
/ 08 июля 2010

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

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

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

7 голосов
/ 24 марта 2016

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

gcc -x c++

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

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

2 голосов
/ 01 июля 2016

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

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

В cmd для типа gcc:

gcc - версия

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

г ++ - версия

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

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

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

gcc -o exe_filename yourfilename.c

* +1032 * Пример: * 1 033 *

gcc -o myfile myfile.c

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

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

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

g ++ -o exe_filename yourfilename.cpp

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

1 голос
/ 05 июля 2010

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

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

...