Как мне установить GCC через Homebrew?

79

Я использую исключительно Homebrew (т.е. я не использую и не буду использовать MacPorts или Fink). Я также хочу свести ручные установки к минимуму. 1

... Но как я могу установить GCC?

Прежде всего, я, конечно, установил Xcode, но текущая версия не поставляется с прилично обновленной GCC (мне нужно как минимум 4.5, но я бы предпочел самую последнюю) - на самом деле, она не поставляется с надлежащим GCC вообще (он только отправляет Clang), и это, кажется, проблема для Homebrew ...

Мне известен список пользовательских GCC и кросс-компиляторов, но на самом деле для всех этих установок требуется уже установленный GCC - по крайней мере, при brewих сбое возникают ошибки компоновщика на Lion, которые я приписываю Clang, и -use-gccне работает очевидным образом причины.

brew doctor упоминает только то, что я уже знаю, что GCC (4.2.x) не установлен.


1 Раньше я смешивал MacPorts, Homebrew и некоторые ручные установки и закончил адом обслуживания и управления версиями. Я не хочу идти туда снова.

Конрад Рудольф
источник
Какой выход gcc --version? Я получаю, i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)и я просто установил Xcode от MAS. И что на выходе echo $PATH?
Gio
@Gio Я получил тот же вывод. $PATHобычно (это почти пустая система, в конце концов): /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin… но я не думаю, что это имеет значение. Формулы, предоставленные homebrew-alt, просто устарели и не работают с Clang.
Конрад Рудольф
1
Зачем использовать Homebrew? MacPorts хорош в управлении несколькими версиями компиляторов. И MacPorts может делать все, что может делать Homebrew.
Джефф Берджес
@JeffBurdges Homebrew лучше. Практически в любой категории.
Конрад Рудольф
2
Как так? Честно говоря, я не люблю Homebrew в основном только потому, что в нем отсутствуют (а) описания пакетов и (б) математические пакеты. В целом, у MacPorts может быть в шесть раз больше пакетов, чем у Homebrew, но да, это неясные пакеты, которые отсутствуют. Я в целом доволен MacPorts, хотя, очевидно, мне бы хотелось, чтобы они интегрировались с менеджерами языковых пакетов, такими как CPAN, CTAN, Caball и т. Д.
Джефф Берджес

Ответы:

30

Решение , предлагаемое @Konrad Rudolph не совсем корректно больше , как формула GCC , что он упомянул была перенесена из homebrew/dupesв homebrew/versions. Вы можете выбрать, какую версию GCC установить. Например, на момент написания этого ответа доступны версии 4.5, 4.7 и 4.8. Вы можете проверить, какие версии доступны здесь .

Короче говоря, вы можете установить GCC 4.8, используя

brew tap homebrew/versions
brew install [flags] gcc48

Вы можете просмотреть доступные флаги установки, используя

brew options gcc48
yihangho
источник
Я попробовал это, и я получил его для установки, но он умирает так:gcc-4.8 hello.c gcc-4.8: error trying to exec 'as': execvp: No such file or directory
Уоррен P
@WarrenP Вы устанавливали с любым [flags]? На моих машинах я установил без каких-либо флагов, и он работает нормально. Почему бы вам не попробовать позвонить gcc-4.8без какого-либо входного файла и посмотреть, если вы получаете фатальную ошибку? Также попробуйте ls /usr/local/Cellar/gcc48/4.8.0/binи посмотрите, если этот каталог содержит gcc-4.8.
Yihangho
Он содержит gcc-4.8 и gcc-4.8 --versionработает, но не может быть запущен для вторичного инструмента с именем, asи поэтому он умирает.
Уоррен П
Хм ... Честно говоря, я понятия не имею, как это решить. Может быть, нам придется подождать более опытного пользователя ...
yihangho
2
@nkint Либо это, либо добавить alias g++='g++-4.8'в свой .bashrc.
Ииханхо
38

Доморощенное решение

Чтобы ответить на мой собственный вопрос, homebrew-versionsтеперь есть довольно современная формула GCC . Может быть установлен с помощью

brew install [flags] https://raw.github.com/Homebrew/homebrew-versions/gcc48.rb

Где [flags]должны быть указаны все необходимые языки, например ( --enable-cxx --enable-fortran).

Это установит исполняемые файлы с суффиксом, т. Е. Должен gccбыть доступен, gcc-versionчтобы избежать конфликтов. При необходимости можно создать соответствующие символические ссылки, чтобы сделать эту версию по умолчанию.

Ручная установка

Кроме того , современный GCC (на момент написания) может быть скомпилирован вручную с помощью следующего сценария оболочки:

VERSION=4.7.0
PREFIX=/usr/gcc-$(VERSION)
LANGUAGES=c,c++,fortran
MAKE=make
# Or
# MAKE='make -j 4' # to compile using four cores

brew-path() { brew info $1 | head -n3 | tail -n1 | cut -d' ' -f1; }

# Prerequisites

brew install gmp
brew install mpfr
brew install libmpc

# Download & install the latest GCC

mkdir -p $PREFIX
mkdir temp-gcc
cd temp-gcc
wget ftp://ftp.gnu.org/gnu/gcc/gcc-$VERSION/gcc-$VERSION.tar.gz
tar xfz gcc-$VERSION.tar.gz
rm gcc-$VERSION.tar.gz
cd gcc-$VERSION

mkdir build
cd build

../configure \
   --prefix=$PREFIX \
   --with-gmp=$(brew-path gmp) \
   --with-mpfr=$(brew-path mpfr) \
   --with-mpc=$(brew-path libmpc) \
   --program-suffix=-$VERSION \
   --enable-languages=$LANGUAGES \
   --with-system-zlib \
   --enable-stage1-checking \
   --enable-plugin \
   --enable-lto \
   --disable-multilib

$MAKE bootstrap

make install

# Uncomment for cleanup …
# cd ../../..
# rm -r temp-gcc

Это выведет GCC на путь /usr/gcc-4.7.0. Теперь все, что вам нужно сделать, это либо создать символические ссылки на исполняемые файлы, либо добавить binкаталог в $PATHпеременную.

Конрад Рудольф
источник
1
Пытаясь скомпилировать рабочую версию wine, я также столкнулся с проблемой отсутствия gcc - к сожалению, установка v4.7 через homebrew вызвала некоторые ошибки; поэтому я пошел на использование Apple v4.2, brew tap homebrew/dupesа затем brew install apple-gcc42. Это помогло мне получить работающий GCC и вино. Вы также можете получить двоичные файлы (как это делает homebrew) отсюда: r.research.att.com/tools
iolsmit
@iolsmit Вам определенно стоит попробовать установить GCC 4.7 снова с чистой, свежей версией Homebrew. Это должно работать как шарм. Если нет, пожалуйста, сообщите об ошибке сопровождающим Homebrew-dupes.
Конрад Рудольф
3
brew tap homebrew/dupes; brew install gcc --use-llvm, См. Github.com/Homebrew/homebrew-dupes/issues/20
тел.
@KonradRudolph везде, куда я поворачиваюсь, ты отвечаешь на вопросы, которые я задаю! Спасибо :)
Рик Смит-Унна
1
@ Warren Не надо кричать - но спасибо за напоминание, потому что на самом деле yihang опубликовал более актуальный ответ, который я сейчас принял.
Конрад Рудольф
13

Сегодня я видел ссылку на этот старый пост. Лучший способ установить GCC на доморощенный прямо сейчас - это просто brew install gcc. Если у вас установлены инструменты командной строки XCode (они отделены от XCode; вы можете установить их xcode-select --install), будет установлена ​​предварительно скомпилированная версия (что очень быстро).

Тим Смит
источник
3

У меня тоже была эта проблема. Более того, мне нужно использовать gfortran, который не поставляется со стандартной (устаревшей) установкой Mac's llvm-gcc.

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

см2
источник
Я попробовал это. Мало того, что это не работало, но метод установки, который он использует, довольно опасен. У меня ушло около часа, чтобы тщательно все отменить.
Боб Аман
2
О, я должен был сказать, что я не устанавливаю его так, как он предлагает. Я просто распаковываю файл и создаю символическую ссылку на бинарный файл, который мне нужен, чтобы убедиться, что символическая ссылка находится где-то в моей переменной PATH. Обычно это делается путем добавления чего-то локального к моему пути, например ~ / bin / или чего-то еще.
см2
Да, это было бы намного более вменяемым. Его процедура установки чертовски сумасшедшая, и я должен был просто принять это, а не слепо.
Боб Аман
3

Если кто-то смотрит на эту старую ветку, кажется, что homebrew / версии, использованные в принятом в настоящее время ответе, устарели в пользу homebrew / core . Просто беги brew install <formula>.

Avi
источник
Не могли бы вы объяснить, как это связано с вопросом ОП, как установить GCC через Homebrew?
Фсб
@fsb Ответ обновлен.
Ави
Это скорее комментарий к принятому ответу. Он не должен быть ответом сам по себе, потому что он не затрагивает вопрос ОП. Когда у вас будет достаточно репутации, вы сможете добавлять комментарии и задавать дополнительные вопросы. Чтобы завоевать репутацию, ответьте на вопросы, которые ясны и кратки .
ФСБ
Нужно ли задавать новый вопрос, чтобы указать версию напитка, где это меняется? Исправление этого старого сообщения кажется низкой выгодой, большой задержкой.
bmike
Если бы у меня было достаточно очков репутации, я бы прокомментировал принятое решение. Не стесняйтесь делать это самостоятельно.
Ави
0

Вы можете попробовать это - https://github.com/kennethreitz/osx-gcc-installer - я успешно использовал его после обновления до Lion для компиляции пакетов с Homebrew и другими (Ruby).

Из прочитанного мной:

Установщик OSX GCC Загрузка и установка массивного установщика XCode - огромная проблема, если вам просто нужен GCC и связанные с ним инструменты.

С помощью osx-gcc-installer вы можете установить необходимые компиляторы из предварительно собранных двоичных пакетов или же создать собственный установщик.

Даррен Ньютон
источник
Это только устанавливает версии, также установленные XCode. Другими словами: устаревший, и не на самом деле GCC, а LLVM-GCC.
Конрад Рудольф
1
Устаревший: да. Суть пакета в том, что это поставляемые утилиты Xcode, но без всех других огромных компонентов, необходимых для Xcode. Не GNU GCC: неправильно. /usr/bin/gccявляется символической ссылкой на llvm gcc, но явная ссылка /usr/bin/gcc-4.2или настройка export CC="gcc-4.2"в вашем .bash_profile или подходящем файле также смягчает проблему. (См. Также этот вопрос переполнения стека .)
Джейсон Салаз
2
Обратите внимание, что этот проект был заменен официальными инструментами командной строки Apple для Xcode: kennethreitz.org/essays/xcode-gcc-and-homebrew
Арто Бендикен,