Компиляция программы 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 ++.Спасибо,

68
задан Priya Ranjan Singh 10 August 2015 в 10:16
поделиться

5 ответов

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

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

gcc info.C -lstdc++

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

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


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

Руп лучше всего говорит об этом в его комментарии к другому ответу:

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

114
ответ дан 24 November 2019 в 14:04
поделиться

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

22
ответ дан 24 November 2019 в 14:04
поделиться

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

g++ myprog.cpp

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

41
ответ дан 24 November 2019 в 14:04
поделиться

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

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

1
ответ дан 24 November 2019 в 14:04
поделиться

Разница между gcc и g++ следующая:

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

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

11
ответ дан 24 November 2019 в 14:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: