В чем разница между g и gcc
Перейти к содержимому

В чем разница между g и gcc

  • автор:

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

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

c++ gcc g++ Брайан Р. Бонди
источник
g ++ => компилятор c ++ gcc => компилятор c

Ответы:

gcc и g++ являются драйверами компилятора коллекции компиляторов GNU (которая когда-то была просто компилятором GNU C ).

Несмотря на то, что они автоматически определяют, какие бэкэнды ( cc1 cc1plus . ) вызывать в зависимости от типа файла, если -x language они не переопределены , они имеют некоторые различия.

Вероятно, наиболее важным отличием в их настройках по умолчанию является то, с какими библиотеками они связываются автоматически.

В соответствии с настройками ссылок онлайн-документации GCC и тем, как вызывается g ++ , g++ это эквивалентно gcc -xc++ -lstdc++ -shared-libgcc (1-й — это опция компилятора, 2-й — это опции компоновщика). Это можно проверить, запустив оба -v параметра (он отображает команды запуска бэкэнда).

Kodiologist
источник

Из этого ответа я делаю вывод, что фактически команда g ++ — это просто gcc с кучей флагов. Почему тогда в linux есть два разных двоичных файла (примерно одинакового размера) для gcc и g ++? Разве мы не должны иметь только один двоичный файл и одну символическую ссылку (или что-то в этом роде)?

УчихаИтачи

@Uchihaltachi — это жесткие ссылки, и при загрузке они проверяют, argv[0] какой вызов следует использовать. Это довольно распространено среди основных утилит UNIX.

GCC: коллекция компиляторов GNU

  • Ссылки на все разные языки, которые поддерживаются компилятором GNU.

gcc : Компилятор
g++ GNU C: Компилятор GNU C ++

  1. gcc скомпилирует: *.c\*.cpp файлы как C и C ++ соответственно.
  2. g++ скомпилирует: *.c\*.cpp файлы, но все они будут обрабатываться как файлы C ++.
  3. Также, если вы используете g++ для связывания объектных файлов, он автоматически связывается в библиотеках std C ++ ( gcc не делает этого).
  4. gcc Компиляция файлов C имеет меньше предопределенных макросов.
  5. gcc Компиляция *.cpp и g++ компиляция *.c\*.cpp файлов имеет несколько дополнительных макросов.

Дополнительные макросы при компиляции *.cpp файлов:

#define __GXX_WEAK__ 1 #define __cplusplus 1 #define __DEPRECATED 1 #define __GNUG__ 4 #define __EXCEPTIONS 1 #define __private_extern__ extern

Мартин Йорк
источник
Вы можете связать стандартную библиотеку C ++ gcc , передав -lstdc++ параметр.
Денилсон Са Майя

Существует больше различий между «gcc» и «g ++», чем только в стандартных библиотеках, поэтому gcc -lstdc++ вы все равно не получите такого же поведения, как g++ . Мы помещаем все это специфичное для языка поведение в его собственный драйвер по причине, для которой это существует. 🙂

Мой комментарий не говорит просто о ссылках . в этом суть. Даже просто ограничив обсуждение связыванием (что не было вашим ответом), пользователь все равно не сможет использовать всю стандартную библиотеку C ++, только указав -lstdc++ , поскольку будут отсутствовать зависимости от математики, RTTI и информации об исключениях. Будет ли данный тест ссылаться или не получится, будет зависеть от операционной системы и от того, какие функции C ++ используются в тестовом примере, и опять же, поэтому все эти знания встроены в драйвер g ++, а не оставлены на усмотрение пользователя, чтобы выяснить ,

Поверьте мне, мы часто обсуждаем это, обычно когда пользователь Linux пытается переместить свой неполный Makefile на другую платформу. 🙂 Стадия g ++ link делает намного больше, чем gcc -lstdc++ на других ОС, особенно когда целью является встроенная платформа. К счастью, именно поэтому мы поставляем g ++ в первую очередь.

Строки спецификации создаются так, чтобы быть специфичными для компилятора, которые, в свою очередь, являются специфическими для операционной системы и цели. Поэтому, если вы запустите -dumpspec (например) кросс-компилятор, ориентированный на встроенную систему, вы увидите различия. Существуют не только различия в компоновщиках . о чем и был ваш ответ (макросы препроцессора, пути, несколько библиотек времени выполнения). Похоже, мы говорим мимо друг друга, но, как бывший мейнтейнер GCC, уверяю вас, я знаком с тем, что такое интерфейсы, а какие нет.

Для c ++ вы должны использовать g ++.

Это тот же компилятор (например, коллекция компиляторов GNU). GCC или G ++ просто выбирают другой интерфейс с другими параметрами по умолчанию.

В двух словах: если вы используете g ++, интерфейс скажет компоновщику, что вы можете захотеть связать его со стандартными библиотеками C ++. Интерфейс gcc этого не сделает (также он может связываться с ними, если вы укажете правильные параметры командной строки).

Нильс Пипенбринк
источник

+1 Также моя man-страница GNU / Linux gcc говорит: «Когда вы компилируете программы на C ++, вы должны вместо этого вызывать GCC как g ++».

эллиптический вид

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

gcc из одного языка «GNU C Compiler» превратился в многоязычную «коллекцию компиляторов GNU». Термин «GNU C Compiler» до сих пор иногда используется в контексте программирования на Си.

g++ Является компилятор С ++ для GNU Compiler Collection. Как gnat и компилятор Ada для gcc . см. Использование коллекции компиляторов GNU (GCC)

Например, команда Ubuntu 16.04 и 18.04 man g++ возвращает GCC(1) страницу руководства.

Ubuntu 16.04 и 18.04 man gcc утверждает, что .

g++ принимает в основном те же параметры, что и gcc

и это по умолчанию .

. использование gcc не добавляет библиотеку C ++. g++ это программа, которая вызывает GCC и автоматически указывает связь с библиотекой C ++. Он рассматривает файлы .c, .h и .i как исходные файлы C ++ вместо исходных файлов C, если не используется -x. Эта программа также полезна при предварительной компиляции заголовочного файла C с расширением .h для использования в компиляциях C ++.

Ищите gcc справочные страницы для получения более подробной информации о вариантах отклонений между gcc и g++ .

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

Технически, либо gcc или g++ могут быть использованы для разработки общего C ++ с действующими параметрами настройки. Однако g++ поведение по умолчанию естественно выровнено с разработкой C ++.

Обычный способ запустить GCC — запустить исполняемый файл с именем gcc , или machine-gcc при кросс-компиляции, или machine-gcc-version запустить определенную версию GCC. Когда вы компилируете программы на C ++, вы должны g++ вместо этого вызывать GCC .

Одно заметное отличие состоит в том, что если вы передадите .c файл в gcc, он будет скомпилирован как C.

Поведение по умолчанию в g ++ заключается в обработке .c файлов как C ++ (если -x c не указано иное).

(Поздно, но для потомков). Как указывали другие ответы, это ни в коем случае не «единственное заметное различие», если только у читателя нет искаженного определения знатности.

underscore_d

Хотя команды 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
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
$ 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 

ps тестовые файлы

$ 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 enum class Color : intred,green,blue>; // scoped enum int main()  std::vector  a 1,2,3>; // bracket initialization return 0; >

Результаты:

  1. Если посмотреть на дерево процессов, то кажется, что gcc и g ++ являются бэкендом для других инструментов, которые в моей среде: cc1plus.exe, cc1.exe, collect2.exe, as.exe, ld.exe
  2. gcc отлично работает как metatool, если у вас правильное расширение или установлены правильные флаги -std -x. Смотрите это

«GCC» — это общий сокращенный термин для коллекции компиляторов GNU. Это и самое общее имя для компилятора, и имя, используемое, когда акцент делается на компиляции программ на C (поскольку ранее аббревиатура расшифровывалась как «GNU C Compiler»).

При ссылке на компиляцию C ++ обычно называют компилятор «G ++». Поскольку существует только один компилятор, его также можно назвать «GCC» независимо от языкового контекста; однако термин «G ++» более полезен, когда акцент делается на компиляции программ на C ++.

Вы можете прочитать больше здесь .

Минь-Триет Фам Чан
источник

Я тестировал gcc и g ++ в системе linux. Используя MAKEFILE, я могу определить компилятор, используемый «GNU make». Я проверил с помощью так называемой функции «динамической памяти» «C плюс плюс»:

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 плюс плюс». Кажется, что выбор g ++ для исходных файлов C ++ — лучший вариант.

Разница между компиляторами gcc и g

gcc и g являются двумя различными компиляторами для языка программирования C и C++. Они предоставляют разные возможности и имеют свои особенности.

gcc (GNU Compiler Collection) – это набор компиляторов, разработанный проектом GNU. Он является стандартным компилятором для многих операционных систем и используется в различных разработческих средах. gcc поддерживает различные языки программирования, включая C, C++, Objective-C, Objective-C++, Fortran, Ada и др.

g (GNU C Compiler) – это компилятор C, разрабатываемый проектом GNU. Он предоставляет возможность компилировать программы, написанные только на языке C. Преимущество g заключается в том, что он может быть более легким и быстрым, поскольку не поддерживает другие языки программирования.

Основное отличие между gcc и g заключается в их функциональности и поддержке различных языков программирования. Если вам необходимо компилировать программы на разных языках, включая C++, Fortran и др., то вам следует использовать gcc. Если же вам нужно компилировать только программы на языке C, то g может быть более оптимальным выбором.

Основные различия между компиляторами gcc и g

Однако есть ряд различий между этими двумя компиляторами:

  1. Поддержка языков: Компилятор gcc поддерживает не только языки C и C++, но и другие языки, такие как Objective-C, Objective-C++, Fortran и другие. В то время как компилятор g предназначен исключительно для языков C и C++.
  2. Версии: Компилятор gcc является частью проекта GNU и имеет множество версий, каждая из которых имеет свои улучшения и исправления ошибок. В то время как компилятор g является одной из версий компилятора gcc (GNU Compiler Collection), но может иметь модифицированную функциональность и набор опций, подходящий для конкретного использования или операционной системы.
  3. Оптимизация кода: Компилятор gcc позволяет настраивать уровень оптимизации кода, что может повысить производительность выполнения программы. Компилятор g также обеспечивает оптимизацию кода, но может иметь более ограниченные опции оптимизации по сравнению с gcc.
  4. Поддержка операционных систем: Компилятор gcc является мультиплатформенным и может быть использован на разных операционных системах, таких как Linux, Windows, macOS и другие. Компилятор g может быть специфичным для определенной операционной системы и может быть оптимизирован для работы на этой платформе.

В конечном счете, выбор между компиляторами gcc и g зависит от требований и предпочтений разработчика. Оба компилятора предоставляют средства для разработки и сборки программного обеспечения на языках C и C++, но могут отличаться в функциональности, оптимизации и поддержке языков.

Компилятор gcc и его отличия от g

Однако многие люди часто путают компилятор gcc с компилятором g (GCC). Несмотря на то, что оба компилятора основаны на том же исходном коде, они имеют некоторые отличия.

Во-первых, компилятор gcc является полным пакетом, который включает в себя не только компилятор, но и другие инструменты, такие как ассемблер, линкер и отладчик. Компилятор g, с другой стороны, является самой основой компилятора gcc, предоставляя только функциональность компиляции.

Во-вторых, компилятор gcc поддерживает различные оптимизации, которые улучшают производительность и эффективность скомпилированного кода. Компилятор g, в свою очередь, не предоставляет таких возможностей оптимизации.

Кроме того, компилятор gcc обеспечивает совместимость со стандартами языков программирования, такими как ANSI C и C++, а также поддерживает различные расширения языка, которые расширяют функциональность языка программирования. Компилятор g поддерживает только базовые стандарты языков программирования.

Наконец, компилятор gcc имеет большую и активную поддержку сообщества, что ведет к более частым обновлениям и исправлениям ошибок. Компилятор g, в свою очередь, имеет более ограниченный круг разработчиков и пользователей.

g и gcc: разница в поддерживаемых языках программирования

gcc (GNU Compiler Collection) — это мощный компилятор, разработанный GNU Project. Он поддерживает широкий спектр языков программирования, включая C, C++, Objective-C, Objective-C++, Ada, Fortran, Go и другие. Это обширный набор инструментов, который позволяет разработчикам создавать программное обеспечение для различных платформ.

g — это утилита, которая используется для компиляции кода на Go. Go — это язык программирования, разработанный компанией Google, который изначально создавался для разработки серверного программного обеспечения. G позволяет компилировать исходный код на Go в исполняемый файл, который может быть запущен на целевой платформе.

Таким образом, различие между g и gcc заключается в поддерживаемых языках программирования. G специализируется на языке программирования Go, в то время как gcc предоставляет обширные возможности для компиляции программ на различных языках программирования.

В завершение, выбор между g и gcc зависит от языка программирования, на котором вы планируете разрабатывать свое программное обеспечение. Если вы работаете с Go, то вам будет нужен g. Если вы используете C, C++, Ada, Fortran или другие языки, то gcc предоставит вам более широкие возможности для компиляции кода.

Вам также может понравиться

Сколько стоит съездить в Дубай на 10 дней

Дубай — город мечты для многих туристов. Это город, где роскошь и современность сливаются воедино, и каждый год тысячи людей мечтают побывать здесь.

Где найти пианино в Fl Studio 20?

FL Studio 20 – известное программное обеспечение для создания музыки, которое широко используется профессионалами и начинающими музыкантами по всему.

Как заменить вентилятор в морозилке no frost

Морозильники с технологией No Frost стали настоящим прорывом в мире холодильной техники. Они обеспечивают автоматическое размораживание и.

Как правильно заправить холодильник хладагентом

Холодильник – это одна из самых важных бытовых техник, которая помогает сохранить продукты свежими и хранить их в течение длительного времени. Однако.

  • Обратная связь
  • Пользовательское соглашение
  • Политика конфиденциальности

Разница между GCC и G ++

GCC — это аббревиатура от GNU Compiler Collections, которая используется в основном для компиляции языков C и C ++. Его также можно использовать для компиляции Objective C и Objective C ++. Самая важная опция, необходимая при компиляции файла исходного кода, — это имя исходной программы, остальные аргументы являются необязательными, например, предупреждение, отладка, связывание библиотек, объектный файл и т. Д. Различные параметры команды GCC позволяют пользователю остановить процесс компиляции на разных этапах.

Команда g ++ — это команда вызова компилятора GNU C ++, которая используется для предварительной обработки, компиляции, сборки и связывания исходного кода для создания исполняемого файла. Различные «опции» команды g ++ позволяют остановить этот процесс на промежуточном этапе.

РАЗНИЦА МЕЖДУ g ++ и gcc

Вниманию читателя! Не прекращайте учиться сейчас. Получите все важные концепции теории CS для собеседований SDE с курсом теории CS по доступной для студентов цене и будьте готовы к отрасли.

Разница между CC, GCC и G ++?

В чем разница между тремя компиляторами CC, gcc, g++ при компиляции C и С++ с точки зрения сборки генерация кода, доступные библиотеки, языковые функции и т.д.?

vehomzzz 04 окт. 2009, в 17:39
Поделиться
Как указано в моем ответе — ответ на ваш вопрос зависит от платформы, но платформа не указана.
Jonathan Leffler 04 окт. 2009, в 15:41
Похожий вопрос: stackoverflow.com/questions/172587/…
Martin York 04 окт. 2009, в 16:07
Поделиться:
compilation

3 ответа

Лучший ответ

Ответ на это зависит от платформы; что происходит в Linux, отличается от того, что происходит в Solaris, например.

Легкая часть (потому что она не относится к платформе) — это разделение «gcc» и «g++»:

  • gcc — это компилятор GNU C из GCC (сборник компиляторов GNU).
  • g++ — это компилятор GNU С++ из GCC.

Жесткая часть, потому что она специфична для платформы, имеет значение «CC» (и «cc» ).

  • В Solaris CC обычно является именем компилятора Sun С++.
  • В Solaris cc обычно является именем компилятора Sun C.
  • В Linux, если он существует, CC, вероятно, является ссылкой на g++.
  • В Linux, cc — это ссылка на gcc.

Однако даже в Solaris это может быть то, что cc является старым компилятором C на основе BSD от /usr/ucb . На практике это, как правило, не установлено, и есть только заглушка, которая терпит неудачу, нанося ущерб тем, кто пытается скомпилировать и установить самонастраивающееся программное обеспечение.

В HP-UX по умолчанию «cc» по-прежнему является компилятором K & R-only C, который позволяет перезапустить ядро, когда это необходимо, и непригодным для использования в современных программах, поскольку он не поддерживает стандарт C. У вас есть использовать альтернативные имена компиляторов (‘acc’ IIRC). Аналогично, в AIX компилятор системы C имеет имена, такие как «xlc» или «xlc32».

Классически системный компилятор по умолчанию назывался «cc» , и самонастраивающееся программное обеспечение возвращается к этому имени, когда оно не знает, что еще использовать.

POSIX попытался законодательно проложить себе путь, требуя, чтобы программы c89 (изначально), а затем и c99 существовали; это компиляторы, совместимые со стандартами ISO/IEC 9899: 1989 и 9899: 1999 C. Сомнительно, что POSIX преуспел.

Вопрос задает вопрос о различиях в функциональности и библиотеках. Как и прежде, ответ частично зависит от платформы, и частично является частью.

Большое различие между компиляторами C и компиляторами С++. Компиляторы С++ будут принимать С++-программы и не будут компилировать произвольные C-программы. (Хотя можно написать C в подмножестве, которое также понимается С++, многие C-программы не являются допустимыми С++-программами). Аналогично, компиляторы C будут принимать программы C и отклонят большинство программ на С++ (поскольку большинство программ на С++ используют конструкции, недоступные на C).

Набор доступных для использования библиотек зависит от языка. Программы на С++ обычно могут использовать библиотеки C на данной платформе; Программы C обычно не могут использовать библиотеки С++. Таким образом, С++ имеет больший набор доступных библиотек.

Обратите внимание, что если вы находитесь в Solaris, объектный код, созданный CC, несовместим с кодом объекта, созданным g++, — это два отдельных компилятора с отдельными соглашениями для таких операций, как обработка исключений и манипуляция имени (и имя искажение намеренно отличается тем, что несовместимые объектные файлы не связаны друг с другом!). Это означает, что если вы хотите использовать библиотеку, скомпилированную с CC, вы должны скомпилировать всю вашу программу с помощью CC. Это также означает, что если вы хотите использовать одну библиотеку, скомпилированную с CC и другую, скомпилированную с g++, вам не повезло. Вы должны перекомпилировать одну из библиотек как минимум.

Что касается качества сборки ассемблера, GCC (сборник компиляторов GNU) выполняет очень хорошую работу. Но иногда родные компиляторы работают немного лучше. Я считаю, компиляторы Intel имеют более обширные оптимизации, которые еще не были реплицированы в GCC. Но любые такие предостережения опасны, пока мы не знаем, на какой платформе вы занимаетесь.

С точки зрения языковых особенностей, компиляторы вообще обычно довольно близки к текущим стандартам (С++ 98, С++ 2003, C99), но обычно существуют небольшие различия между стандартным языком и языком, поддерживаемым компилятор. Старая стандартная поддержка C89 по существу одинаковая (и полная) для всех компиляторов C. Существуют различия в более темных углах языка. Вам нужно понять «поведение undefined», «поведение, определяемое системой» и «неопределенное поведение»; если вы вызываете поведение undefined, вы будете получать разные результаты в разное время. Существует также множество опций (особенно с GCC) для настройки поведения компилятора. GCC имеет множество расширений, которые упрощают жизнь, если вы знаете, что вы нацеливаете только это семейство компиляторов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *