Вопрос: Как скомпилировать программу 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 ++.Спасибо,
gcc действительно отлично компилирует код на C ++. Вы получили ошибки компоновщика , а не ошибки компилятора.
Скорее всего, если вы измените строку компиляции на такую:
gcc info.C -lstdc++
, что сделает ее ссылкой на стандартную библиотеку C ++, тогда она будет работать нормально.
Однако вам стоит просто упростить себе жизнь и использовать g ++.
РЕДАКТИРОВАТЬ:
Руп лучше всего говорит об этом в его комментарии к другому ответу:
[...] 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 в верхнем регистре, если вы никогда не хотите переносить свой код и готовы к ненависти со стороны тех, с кем вы работаете.
Если я правильно помню, gcc определяет тип файла по суффиксу. Итак, сделайте его foo.cc, и он должен работать.
И, отвечая на ваш другой вопрос, , что - это разница между «gcc» и «g ++». gcc - это интерфейс, который выбирает правильный компилятор.
Разница между gcc и g++ следующая:
gcc | g++
compiles c source | compiles c++ source
используйте g++ вместо gcc для компиляции исходников c++.