Подтвердить что ты не робот

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

Вопрос: Как скомпилировать С++-программу с помощью 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, способный компилировать программы на С++? В зависимости от примечания, какая разница между gcc и g++. Спасибо,

4b9b3361

Ответ 1

gcc действительно может скомпилировать код на С++ просто отлично. Вы получили ошибки компоновщика, а не ошибки компилятора.

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

gcc info.C -lstdc++

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

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


EDIT:

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

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

Ответ 2

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

g++ myprog.cpp

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

Ответ 3

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

Ответ 4

Разница между gcc и g++ такова:

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

используйте g++ вместо gcc, чтобы скомпилировать исходный код С++.

Ответ 5

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

gcc -x c++

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

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

Ответ 6

Это сработало для меня. Только один код строки в cmd.

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

В cmd для типа gcc:

gcc --version

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

g++ --version

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

Теперь скомпилируйте ваши .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. Просто откройте его. Hurray..

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

g++ -o exe_filename yourfilename.cpp

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

Ответ 7

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

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