Разница между CC, gcc и g++?



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

790   3  

3 ответов:

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

легкая часть (потому что она не зависит от платформы)-это разделение " gcc " и " g++":

  • gcc-это компилятор GNU C из GCC (коллекция компиляторов GNU).
  • g++ - это компилятор GNU C++ из GCC.

трудная часть, потому что она специфична для платформы, - это значение " CC " (и 'cc').

  • на Solaris CC обычно является именем компилятора Sun C++.
  • на 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 компилятор system C имеет такие имена, как " xlc " или "xlc32".

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

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


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

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

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

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

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

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

CC - Это переменная окружения, ссылающаяся на компилятор C системы. То, на что он указывает (доступные библиотеки и т. д.), зависит от платформы. Часто это будет указывать на /usr/bin/cc, фактический c complier (драйвер). На платформах Linux CC почти всегда указывает на /usr/bin/gcc.

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

g++ - это драйвер двоичный, как gcc, но с несколькими специальными опциями, установленными для компиляции C++. Примечательно (по моему опыту),g++ свяжет libstdc++ по умолчанию, в то время как gcc не будет.

Я хочу добавить только одну информацию, что cc в Linux. Он связан с gcc. Это проверить. enter image description here

аналогично, то же самое с C++.

uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ whereis c++
c++: /usr/bin/c++ /usr/include/c++ /usr/share/man/man1/c++.1.gz  
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /usr/bin/c++
lrwxrwxrwx 1 root root 21 Jul 31 14:00 /usr/bin/c++ -> /etc/alternatives/c++
uddhavpgautam@UbuntuServer1604:~/Desktop/c++$ ls -l /etc/alternatives/c++
lrwxrwxrwx 1 root root 12 Jul 31 14:00 /etc/alternatives/c++ -> /usr/bin/g++

Comments

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