Как установить gcc на mac os

Обновлено: 04.07.2024

Недавно я разочаровался в новом компиляторе clang, включенном в Xcode 5. Мне было интересно, как лучше всего установить GNU GCC на OS X.

Что нужно учитывать:

  • Я не хочу использовать MacPorts, fink, homebrew или любой другой сторонний менеджер пакетов.
  • Я хотел бы по возможности использовать последнюю версию GCC, собранную из исходников.
  • Мне нужно, чтобы существующий GCC (жесткая ссылка на clang) оставался по умолчанию, но легко мог использовать GNU GCC, когда мне это нужно.
  • Я бы хотел избежать изменения кода, если это вообще возможно.

РЕДАКТИРОВАТЬ: Успех! Используя GCC 4.9.2 (с GMP 5.1.3, MPFR 3.1.2, MPC 1.0.2, ISL 0.12.2 и CLooG 0.18.1), я успешно построил GCC. Советы, которые можно взять отсюда:

  • Убедитесь, что вы используете ISL и CLooG. Да, они не являются обязательными, но они делают компилятор более оптимизированным, и у меня были проблемы со сборкой без них. Убедитесь, что вы используете ISL 0.12, а не не последней версии (0.14).
  • Если возможно, используйте автономные инструменты разработчика, не XCode. (В XCode есть несколько ошибочных заголовков, и хотя я не заметил никаких проблем при сборке GCC, у меня были проблемы с другим программным обеспечением (например, GPG)).
  • Я рекомендую поместить все ваши источники в каталог gcc, а не собирать и устанавливать отдельно (так быстрее)
  • Убедитесь, что вы вызываете configure с CC=clang CXX=clang++ , чтобы GCC знал, что он не компилируется GCC.
  • Определенно, определенно, определенно , вызывайте make с -j8 , иначе сборка займет около 4 часов! (С -j8 на моем MBP середины 2012 года с 8 ГБ ОЗУ потребовалось 1 1/3 часа.) ( make -j8 означает, что make может создавать 8 потоков одновременно (4 ядра + HT), тогда как на двухъядерном компьютере вы должны запустить make -j4 .)

Надеюсь это поможет!

3 ответа

Я делаю это так:

Используйте сценарий, чтобы извлечь исходный код для GCC и вспомогательных библиотек в каталог, создать каталог объектов и запустить сборку.

Это сценарий, который я использовал для GCC 4.8.2:

Когда это закончится, запустите установку. Затем добавьте $HOME/gcc/gcc-4.8.2/bin (имя, которое вы указываете в --prefix плюс /bin ) к вашему PATH перед /usr/bin .

С приличным MacBook Pro с вращающимся диском 5400 об / мин требуется час или два для компиляции всего (с использованием параметра -j8 для make ) и требуется несколько гигабайт дискового пространства во время компиляции. SSD хорош при этом (определенно быстрее)!

GCC 4.9.0 был выпущен 22 апреля 2014 г. Я установил его, используя в основном тот же процесс, но с CLooG 0.18.1 и ISL 0.12.2 (требуемые обновления) и GMP 5.1.3 (и 6.0.0a), MPC 1.0.2 (или 1.0.1) и MPFR. 3.1.2 в Mac OS X 10.9.2 Mavericks и производной от Ubuntu 12.04. Помните, что gmp-6.0.0a.tar.xz извлекает в каталог gmp-6.0.0 (а не gmp-6.0.0a , как вы могли бы ожидать).

В период с 2014 по 27 сентября 2017 года я создал версии GCC 4.9.0, 4.9.1, 5.1.0, 5.2.0, 5.3.0, 6.1.0, 6.2.0, 6.3.0, 7.1.0. с небольшими изменениями в сценарии сборки, показанном ниже для GCC 7.2.0 на macOS Sierra (10.12). Версии вспомогательных библиотек менялись довольно часто.

MacOS Sierra и High Sierra

14 августа 2017 г. я использовал второстепенный вариант приведенного выше сценария для сборки GCC 7.2.0 на macOS Sierra 10.12 (с использованием XCode 8 в качестве компилятора начальной загрузки). Одно изменение заключается в том, что CLooG, похоже, больше не нужен (я перестал добавлять его в GCC 6.2.0). Это мой текущий сценарий:

Убедитесь, что ваша версия tar поддерживает все 4 различных формата сжатых файлов ( .lz , .gz , .xz , .bz2 ), но поскольку стандартная версия Mac tar делает то же самое для меня, возможно, это сработает и для вас.

27 сентября 2017 года мне не удалось собрать GCC 7.2.0 на macOS High Sierra 10.13 (с использованием XCode 9 для компилятора начальной загрузки) с использованием того же сценария, который работал на Sierra 10.12. Непосредственной ошибкой был отсутствующий заголовок <stack> ; Мне нужно будет выяснить, верна ли моя установка XCode 9 - или, точнее, почему она неверна, поскольку <stack> - это стандартный заголовок в C ++ 98 и далее. Вероятно, есть простое решение; Я просто еще не потратил время на погоню за ним. (Да, я запускал xcode-select --install несколько раз; тот факт, что мне приходилось запускать его несколько раз из-за сбоев в сети, может быть частью проблемы.) (Я получил GCC 7.2.0 для успешной компиляции на 2017-12-02; я не помню, какая гимнастика - если таковая была - требовалась, чтобы это работало.)

Используйте предварительно скомпилированный двоичный файл специально для OS X 10.9.x Mavericks:

Скомпилировано с использованием исходного кода с серверов GNU.

Он содержит текущие версии (4.7 - стабильный выпуск) gfortran (бесплатно, с открытым исходным кодом, компилятор GNU Fortran 95), gcc (GNU C) и g ++ (GNU C ++) компиляторы, которые могут выполнять автоматическую векторизацию (т.е. изменять код для автоматического использования преимуществ AltiVec / SSE) и другие сложные оптимизации, такие как OpenMP. Для получения дополнительной информации см. эту веб-страницу .

Загрузите мои двоичные файлы и компакт-диск в папку загрузки . Затем gunzip gcc-4.9-bin.tar.gz (если ваш браузер этого еще не сделал), а затем sudo tar -xvf gcc-4.9-bin.tar -C / . Он устанавливает все в / usr / local . Вы можете вызвать компилятор Fortran 95, просто набрав гфортран . Вам также потребуется установить XCode Tools от Apple. из Mac App Store. С XCode 4 или 5 вам нужно будет скачать инструменты командной строки в качестве дополнительного шага. Вы найдете вариант чтобы загрузить инструменты командной строки в настройках XCode.

В 10.9 Mavericks вы можете получить инструменты командной строки, просто набрав xcode-select --install .

У Homebrew теперь есть пакет GCC, поэтому вы можете установить его с помощью этой команды:

Установите gcc на mac через терминал

Я установил Xcode и инструменты командной строки с веб-сайта разработчиков Mac, который, как я прочитал несколько раз, является обязательным условием. Я также установил программу MacPorts. В терминале:

Все вышеперечисленное шло гладко, пока я не напечатал:

-bash: hash: gcc: not found

Я в растерянности и не знаю, как продолжить успешную установку gcc на моем Mac (на котором установлена ​​Mac OS X 10.9.1).

Очень признателен за любые предложения и / или альтернативы установке gcc

  • По какой причине вам нужен именно gcc? clang использует тот же синтаксис, быстрее компилируется и генерирует более быстрый код. Основные ошибки были устранены за последние несколько лет.
  • Редактирование поможет этому. Если у вас есть пакет, который нужно скомпилировать, укажите его. Если вы просто хотите узнать, как сделать компиляцию gcc для удовольствия, это тоже хорошо, но ответ на любой из этих вопросов будет другим.
  • Что значит which gcc дать?
  • Вы проверяли переменную пути в своем

Возможно, вам лучше установить gcc из homebrew, чем Macports.

У них могут быть две проблемы. Одна проблема - это ваш путь. Вам необходимо иметь / opt / local / bin перед / usr / bin, в настоящее время у вас есть / opt / local / bin за / usr / bin. Из-за этого g ++, вероятно, все еще ссылается на clang.

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

После успешного выполнения команды установки для gcc (здесь версия 4.9):

sudo port install gcc49

Вы можете убедиться, что у вас установлены двоичные файлы gcc:

Затем вы можете запустить gcc с полным путем к двоичным файлам:

Если вы хотите заменить (временно или навсегда) компилятор clang на gcc, вы можете сделать это, установив CC env var следующим образом, например:

В качестве примечания обратите внимание, что для port select gccVersion для работы вам нужно будет установить gcc_select :

Я не рассматривал детали пакета, поэтому я не уверен, будет ли он работать между clang и портом, установленным gcc, или только с несколькими разными версиями установленных портов gcc.

Установите gcc на mac через терминал

Я установил Xcode и инструменты командной строки с веб-сайта разработчиков Mac, который, как я прочитал несколько раз, является обязательным условием. Я также установил программу MacPorts. В терминале:

Все вышеперечисленное шло гладко, пока я не напечатал:

-bash: hash: gcc: not found

Я в растерянности и не знаю, как продолжить успешную установку gcc на моем Mac (на котором установлена ​​Mac OS X 10.9.1).

Очень признателен за любые предложения и / или альтернативы установке gcc

  • По какой причине вам нужен именно gcc? clang использует тот же синтаксис, быстрее компилируется и генерирует более быстрый код. Основные ошибки были устранены за последние несколько лет.
  • Редактирование поможет этому. Если у вас есть пакет, который нужно скомпилировать, укажите его. Если вы просто хотите узнать, как сделать компиляцию gcc для удовольствия, это тоже хорошо, но ответ на любой из этих вопросов будет другим.
  • Что значит which gcc дать?
  • Вы проверяли переменную пути в своем

Возможно, вам лучше установить gcc из homebrew, чем Macports.

У них могут быть две проблемы. Одна проблема - это ваш путь. Вам необходимо иметь / opt / local / bin перед / usr / bin, в настоящее время у вас есть / opt / local / bin за / usr / bin. Из-за этого g ++, вероятно, все еще ссылается на clang.

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

После успешного выполнения команды установки для gcc (здесь версия 4.9):

sudo port install gcc49

Вы можете убедиться, что у вас установлены двоичные файлы gcc:

Затем вы можете запустить gcc с полным путем к двоичным файлам:

Если вы хотите заменить (временно или навсегда) компилятор clang на gcc, вы можете сделать это, установив CC env var следующим образом, например:

В качестве примечания обратите внимание, что для port select gccVersion для работы вам нужно будет установить gcc_select :

Я не рассматривал детали пакета, поэтому я не уверен, будет ли он работать между clang и портом, установленным gcc, или только с несколькими разными версиями установленных портов gcc.


Заинтригованный впечатляющими бенчмарками M1, я достал последний Mac Mini, чтобы замерить скорость компиляции на C/C++.

Измеряем локальный build2 (без репозитория пакетов), который включает преимущественно код на C++ (611 единиц трансляции) с некоторыми блоками на C (29) и связками между ними (19). Такой бенчмарк требует только компилятора C++ и входит в тестовый набор Phoronix, поэтому можно сравниться с большим количеством процессоров.

Бенчмарк Phoronix в настоящее время использует build2 0.12.0, у нас 0.13.0 (текущий релиз), здесь сборка выполняется примерно на 10% медленнее.

После настройки Mac OS и установки инструментов командной строки для XCode 12.2 у нас есть всё необходимое:


Судя по _LIBCPP_VERSION в заголовке __version файла libc++ , эта версия Apple Clang ответвилась от ванильного Clang где-то в процессе разработки 10.0.0.

Возможно, вы также заметили, что название процессора в триплете Apple Clang отличается от стандартного aarch64 . На самом деле config.guess показывает следующее:


Чтобы не использовать два названия для одного и того же, build2 канонизировал arm64 в aarch64 , поэтому в buildfiles мы всегда видим aarch64.

Проверим количество аппаратных потоков в sysctl :


Здесь 8 потоков, это 4 производительных ядра и 4 энергоэффективных. В первом прогоне задействуем все ядра. Очевидно, это даёт наилучший результат:

Приятным сюрпризом оказалось то, что build2 0.13.0 заработал без особых проблем, хотя он вышел раньше M1. Поскольку в ARM слабое упорядочение памяти, это также послужило дополнительной проверкой многопоточной реализации build2 и интенсивного использования атомиков.

Однопоточный бенчмарк оценивает производительность CPU в инкрементальных билдах:


Ядро E-2288G справляется за 826 секунд. Таким образом, ядро Xeon на 5 ГГц на самом деле медленнее, чем ядро M1 на 3,2 ГГц.

Еще один интересный результат — четырёхпоточный прогон, который использует только производительные ядра М1:


Хотя он несколько медленнее восьмиядерного теста, но зато использует меньше памяти. Таким образом, такой вариант имеет смысл на системах с недостатком оперативной памяти (как на всех современных машинах M1).

Вот краткое изложение всех результатов:


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

Теперь добавим несколько интересных результатов из бенчмарка Phoronix. В частности, уместно взять показатели новейших рабочих станций и мобильных процессоров Intel и AMD. Вот моя подборка (можете составить собственную, только не забудьте добавить дополнительные 10% к результатам Phoronix; также обратите внимание, что в большинстве тестов используется GCC вместо Clang):


Обратите внимание, что результаты для лучших мобильных Intel (1185G) и AMD (4900HS), к сожалению, ещё не доступны, и приведённые цифры экстраполированы на основе частоты и других бенчмарков.

Из приведённой выше таблицы легко понять, что Apple M1 — впечатляющий процессор, особенно с учётом энергопотребления. Более того, это первый общедоступный ARM-процессор настольного класса. Для сравнения, та же сборка на Raspberry Pi 4B занимает 1724 секунды, то есть более чем в 10 раз медленнее! Хотя мы не можем тут загрузить Linux или Windows, но есть некоторые свидетельства, что они работают на виртуальных машинах с приличной производительностью. В итоге, конвейер непрерывной сборки на базе ARM может стать стандартным.

Увидев бенчмарки M1, невольно задаёшься вопросом, как Apple такое удалось. Хотя есть много спекуляций с некоторыми элементами чёрной магии и колдовства, но вполне хорошим источником технической информации мне показалась эта статья о M1 на Anandtech (и ещё одна там по ссылке). Основные моменты:

Процесс TSMC 5 нм
По сравнению с интеловскими 10 нм (для 11x5G, 14 нм для E-2288G) и 7 нм у AMD/TSMC.

LPDDR4-4266 RAM
Только новейшие мобильные процессоры от Intel и AMD работают с такой быстрой памятью.

Большой кэш L1
У M1 необычно большой кэш L1 для команд и данных.

Большой и быстрый общий кэш L2
В отличие от процессоров Intel и AMD, которые используют отдельные кэши L2 меньшего объёма и большой, но более медленный общий кэш L3, в процессоре M1 реализован быстрый и большой общий кэш L2.

Широкое ядро
У M1 необычайно «широкое» ядро, которое выполняет несколько инструкций параллельно и/или не по порядку. Есть предположение, что из-за слабого упорядочения памяти ARM и кодирования команд фиксированного размера, Apple смогла сделать гораздо более широкое ядро.

Читайте также: