10 ответов:
gccиg++являются компилятор-драйверы ' Gnu Compiler коллекция '(который когда-то был просто 'Gnu Компилятор C').даже если они автоматически определить, какие модули (
cc1cc1plus...) вызывать в зависимости от типа файла, если не переопределено с помощью-x language, у них есть некоторые различия.вероятно, самое важное различие в их значениях по умолчанию - это то, с какими библиотеками они связываются автоматически.
согласно онлайн-документации GCC параметры ссылок и как вызывается g++,
g++эквивалентноgcc -xc++ -lstdc++ -shared-libgcc(1-й вариант компилятора, 2-й две опции линкера). Это можно проверить, запустив оба с помощью-vопция (она отображает выполняемые команды backend toolchain).
GCC: GNU Compiler Collection
- ссылки на все различные языки, которые поддерживаются компилятором GNU.
gcc: компилятор GNU C
g++: компилятор GNU C++основные отличия:
- gcc скомпилирует: *.с.*/cpp-файлы как C и C++ соответственно.
- g++ скомпилирует: *.с.*/cpp файлы, но все они будут рассматриваться как файлы C++.
- также если вы используете g++ чтобы связать объектные файлы, он автоматически связывает их в библиотеках std C++ (gcc этого не делает).
- GCC компиляция файлов C имеет меньше предопределенных макросов.
- компиляция gcc *.компиляция cpp и g++*.с.*/cpp файлы имеет несколько дополнительных макросов.
дополнительные макросы при компиляции *.cpp файлы:
#define __GXX_WEAK__ 1 #define __cplusplus 1 #define __DEPRECATED 1 #define __GNUG__ 4 #define __EXCEPTIONS 1 #define __private_extern__ extern
для c++ вы должны использовать g++.
Это один и тот же компилятор (например, коллекция компиляторов GNU). GCC или G++ просто выберите другой интерфейс с различными параметрами по умолчанию.
в двух словах: если вы используете g++, интерфейс сообщит компоновщику, что вы можете связать его со стандартными библиотеками C++. Интерфейс gcc не будет этого делать (также он может связаться с ними, если вы передадите правильные параметры командной строки).
в чем разница между
g++иgcc?
gccэволюционировал от одного языка "GNU C Compiler", чтобы быть многоязычным "GNU Compiler Collection". Термин "компилятор GNU C" все еще иногда используется в контексте программирования на языке Си.The
g++и компилятор C++ для коллекции компиляторов GNU. Какgnatявляется компилятором Ada дляgcc. см. раздел Использование коллекции компиляторов GNU (GCC)например, Ubuntu 16.04 и 18.04 возвращает
GCC(1)страница руководства.Ubuntu 16.04 и 18.04
man gccутверждает, что ...
g++принимает в основном те же параметры, что иgccи это по умолчанию ...
... использование
gccне добавляет библиотеку C++.g++программа это вызывает GCC и автоматически определяет связывание против с++ библиотека. Это лечит .с. ,h и .i файлы как исходные файлы C++ вместо C исходные файлы, если не используется-x. Эта программа также полезна при предварительная компиляция файла заголовка C с помощью a .расширение h для использования в C++ компиляции.Поиск
gccman-страницы для указания нравы на параметр дисперсииgccиg++.какой из них следует использовать для общей разработки c++?
технически, либо
gccилиg++может использоваться для общей разработки C++ с соответствующими настройками параметров. Тем не менее,g++поведение по умолчанию естественно согласуется с разработкой на C++.на странице Ubuntu 18.04 man добавлен следующий абзац:
обычный способ запуска GCC-запустить исполняемый файл с именем
gccилиmachine-gccпри кросс-компиляции, илиmachine-gcc-versionдля запуска конкретной версии GCC. при компиляции программ на C++ следует вызывать GCC как .
хотя команды gcc и g++ делают очень похожие вещи, g++ разработан как команда, которую вы вызываете для компиляции программы на C++; он предназначен для автоматического выполнения правильной вещи.
за кулисами они действительно одна и та же программа. Как я понимаю, как решить, стоит ли скомпилировать программу на C или C++ на основе расширения имени файла. Оба они способны связываться со стандартной библиотекой C++, но только g++ делает это по умолчанию. Так что если у вас есть программа написанный на C++, который не должен связываться со стандартной библиотекой, gcc будет делать правильные вещи; но тогда и g++. Так что нет никаких причин не использовать g++ для общей разработки C++.
Я заинтересовался этим вопросом и провел несколько экспериментов
Я нашел это описание здесь, но это очень коротко.
затем я попытался поэкспериментировать с gcc.exe и g++.exe на моей машине windows:
$ g++ --version | head -n1 g++.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3 $ gcc --version | head -n1 gcc.exe (gcc-4.6.3 release with patches [build 20121012 by perlmingw.sf.net]) 4.6.3Я попытался скомпилировать простые тестовые файлы c89, c99 и c++1998, и это хорошо работает для меня с правильными расширениями, соответствующими для язык
gcc -std=c99 test_c99.c gcc -std=c89 test_c89.c g++ -std=c++98 test_cpp.cpp gcc -std=c++98 test_cpp.cppно когда я пытаюсь запустить инструмент "gnu compiler collection" таким образом:
$ gcc -std=c++98 test_cpp.c cc1.exe: warning: command line option '-std=c++98' is valid for C++/ObjC++ but not for C [enabled by default]но этот все еще работает без ошибок
$ gcc -x c++ -std=c++98 test_cpp.cи это тоже
$ g++ -std=c++0x test_cpp_11.cppp.s. Test files
$ cat test_c89.c test_c99.c test_cpp.cpp // C89 compatible file int main() { int x[] = {0, 2}; return sizeof(x); } // C99 compatible file int main() { int x[] = {[1]=2}; return sizeof(x); } // C++1998,2003 compatible file class X{}; int main() { X x; return sizeof(x); } // C++11 #include <vector> enum class Color : int{red,green,blue}; // scoped enum int main() { std::vector<int> a {1,2,3}; // bracket initialization return 0; }выводы:
если посмотреть на дерево процессов, то кажется, что gcc, а g++ - это бэкэнд к другим инструменты, которые в моей среде являются:cc1plus.exe, cc1.ехе, взыскать 2.отлично, как.отлично, ЛД.exe
gcc отлично работает как metatool, если у вас есть правильное расширение или установить правильный -ЗППП -х флагов. Смотрите этой
" GCC " - это общий сокращенный термин для коллекции компиляторов GNU. Это как самое общее имя для компилятора, так и имя, используемое, когда акцент делается на компиляции программ C (как аббревиатура ранее означала "компилятор GNU C").
при обращении к компиляции C++ обычно вызывается компилятор " G++". Поскольку существует только один компилятор, его также можно назвать " GCC "независимо от контекста языка; однако термин" G++" более полезен, когда акцент делается на компиляции программ на C++.
вы могли бы прочитать больше здесь.
единственное заметное различие заключается в том, что если вы передаете
.cдля gcc он будет компилироваться как C, тогда как g++ всегда будет рассматривать его как C++.
Я тестировал gcc и g++ в системе linux. Используя MAKEFILE, я могу определить компилятор, используемый "GNU make". Я протестировал с так называемой "динамической памятью" функцию определения местоположения "C plus plus" по:
int main(){ int * myptr = new int; * myptr = 1; printf("myptr[0] is %i\n",*myptr); return 0; }только g++ может успешно компилироваться на моем компьютере, а gcc сообщит об ошибке
undefined reference to `operator new(unsigned long)'поэтому мой собственный вывод-gcc не полностью поддерживает "C plus plus". кажется, что выбор G++ для исходных файлов C++ является лучшим вариантом.
gcc и g ++ являются компилятором GNU. Они оба компилируют c и c++. Разница заключается в *.файлы c ССАГПЗ рассматривает его как программу на C, и G++ не видит его как программы на языке C++. *.файлы cpp считаются c ++ программы. c++ - это супер набор c и синтаксис более строгий, поэтому будьте осторожны с суффиксом.
Comments