Различие между CC, gcc и g ++?

Ваш самый быстрый путь вперед (если Вы не хотите стать экспертом Tcl, который был бы... необычен... в 2009) состоит в том, чтобы, вероятно, использовать autoexpect. Вот страница справочника:

http://expect.nist.gov/example/autoexpect.man.html

Короче говоря, разожгите autoexpect, выполните свою ssh сессию, закончите то, что необходимо сделать, прекратите автоожидать и затем победите клавиатуру по получающейся путанице, пока это не работает:) я предполагаю, что Вам не нужны что-то большее чем быстрый взлом для разбираний в ключах и затем, хорошо оно кажется на знание счета уже с этим.

И существует этот вопрос , который уже содержит пример близко к тому, что Вы ищете.

86
задан mrflash818 13 August 2018 в 17:21
поделиться

2 ответа

Ответ на этот вопрос зависит от платформы; то, что происходит в 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 это может быть это старый компилятор Си на основе BSD из / usr / ucb . На практике это обычно не устанавливается, и есть просто заглушка, которая выходит из строя, нанося ущерб тем, кто пытается скомпилировать и установить самоконфигурируемое программное обеспечение.

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

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

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


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

Большой разрыв между компиляторами C и компиляторами 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 Compiler Collection) очень хорошо справляется. Но иногда нативные компиляторы работают немного лучше. Компиляторы Intel имеют более обширные оптимизации, которые еще не были воспроизведены в GCC, Я полагаю. Но любые подобные объяснения опасны, пока мы не знаем, какая платформа вас интересует.

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

107
ответ дан 24 November 2019 в 08:05
поделиться

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

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

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

22
ответ дан 24 November 2019 в 08:05
поделиться