В чем разница между G++ и gcc?



в чем разница между G++ и gcc? Какие из них следует использовать для общей разработки на C++?

1062   10  

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++

основные отличия:

  1. gcc скомпилирует: *.с.*/cpp-файлы как C и C++ соответственно.
  2. g++ скомпилирует: *.с.*/cpp файлы, но все они будут рассматриваться как файлы C++.
  3. также если вы используете g++ чтобы связать объектные файлы, он автоматически связывает их в библиотеках std C++ (gcc этого не делает).
  4. GCC компиляция файлов C имеет меньше предопределенных макросов.
  5. компиляция 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++ компиляции.

Поиск gcc man-страницы для указания нравы на параметр дисперсии 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++.

Я заинтересовался этим вопросом и провел несколько экспериментов

  1. Я нашел это описание здесь, но это очень коротко.

  2. затем я попытался поэкспериментировать с 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
    
  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
    
  4. но когда я пытаюсь запустить инструмент "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]
    
  5. но этот все еще работает без ошибок

    $ gcc -x c++ -std=c++98 test_cpp.c
    
  6. и это тоже

    $ g++ -std=c++0x test_cpp_11.cpp 
    

p.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;
}

выводы:

  1. если посмотреть на дерево процессов, то кажется, что gcc, а g++ - это бэкэнд к другим инструменты, которые в моей среде являются:cc1plus.exe, cc1.ехе, взыскать 2.отлично, как.отлично, ЛД.exe

  2. 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

    Ничего не найдено.