В чем разница между G++ и gcc?
10 ответов
gcc
и g++
являются драйверами компилятора ' GNU Compiler коллекция' (который когда-то был просто " Gnu Компилятор C').
даже если они автоматически определить, какие модули (cc1
cc1plus
...) вызывать в зависимости от типа файла, если не переопределено с -x language
, у них есть некоторые различия.
вероятно, наиболее важным различием в их значениях по умолчанию является то, какие библиотеки они связывают с автоматически.
согласно онлайн-документации GCC параметры ссылок и как вызывается g++, g++
эквивалентно gcc -xc++ -lstdc++ -shared-libgcc
(1-й вариант компилятора, 2-й две опции линкера). Это можно проверить, запустив оба с помощью -v
опция (она отображает команды backend toolchain при запуске).
GCC: коллекция компиляторов GNU
- ссылки на все различные языки, поддерживаемые компилятором GNU.
gcc: компилятор GNU C
G++: компилятор GNU C++
основные отличия:
- gcc скомпилирует: *.с.*/cpp-файлы как C и C++ соответственно.
- г++ будет компилировать: *.с.*/файлы 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", чтобы быть многоязычной "коллекцией компиляторов GNU". Термин "компилятор GNU C" все еще используется иногда в контексте программирования на языке C.
на 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 и .я файлы как исходные файлы C++ вместо C исходные файлы, если не используется-x. Эта программа также полезна при предварительная компиляция файла заголовка C с помощью a .расширение h для использования в C++ компиляции.
Поиск gcc
man-страницы для подробностей нравов о вариантах отклонений gcc
и g++
.
какой из них следует использовать для общей разработки C++?
технически, либо gcc
или g++
может использоваться для общей разработки C++ с применимыми настройками параметров. Однако g++
поведение по умолчанию естественно выровнено с разработкой C++.
на справочной странице Ubuntu 18.04 добавлен следующий абзац:
обычный способ запуска GCC-запустить исполняемый файл
gcc
илиmachine-gcc
при кросс-компиляции, илиmachine-gcc-version
для запуска определенной версии GCC. при компиляции программ на C++ следует вызывать GCC as .
хотя команды 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.cpp
p.s. Тестовые файлы
$ 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, as.exe, ld.exe
gcc отлично работает как metatool, если у вас есть правильное расширение или установить правильно -флаги std-x. См.этой
" GCC " является общим сокращенным термином для коллекции компиляторов GNU. Это как самое общее имя компилятора, так и имя, используемое, когда акцент делается на компиляции программ C (как аббревиатура ранее означала "GNU C Compiler").
при обращении к компиляции C++ обычно называют компилятор " G++". Поскольку существует только один компилятор, также точно называть его "GCC" независимо от контекста языка; однако термин "G++" более полезен, когда акцент делается на компиляции программ на C++.
вы можете прочитать больше здесь.
единственное заметное различие заключается в том, что если вы передадите .c
для gcc он будет компилироваться как C, тогда как g++ всегда будет рассматривать его как c++.
Я тестировал gcc и g++ в системе linux. С помощью make-файла, можно определить compliler используется "пакет". Я тестировал с помощью так называемой "динамической памяти" функцию определения местоположения "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 files gcc рассматривает его как программу на c, а g++ рассматривает его как программу на C++. *.cpp файлы считаются программами c ++. c++ - это супер набор c и синтаксис более строгий, поэтому будьте осторожны с суффиксом.