Компиляция программы на С++ с помощью 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++.
Спасибо,
Ответы
Ответ 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 - это интерфейс, который выбирает правильный компилятор.