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

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

информация.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 ответов


gcc может фактически скомпилировать код c++ просто отлично. Ошибки, которые вы получили линкер ошибки, а не ошибки компилятора.

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

gcc info.C -lstdc++

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

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


EDIT:

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

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


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

g++ myprog.cpp

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


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


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

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

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


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

gcc -x c++

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

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


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

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

в 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, здесь вы найдете файл .расширение exe. Просто открой. Ура..

на .cpp синтаксис:

g++ - o exe_filename yourfilename.cpp

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


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

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