Jak zainstalować GCC przez Homebrew?

79

Używam wyłącznie Homebrew (tzn. Nie używam MacPorts ani Fink). Chcę również ograniczyć ręczne instalacje. 1

… Ale jak mogę zainstalować GCC?

Po pierwsze, oczywiście zainstalowałem Xcode, ale obecna wersja nie jest dostarczana z przyzwoitym GCC (potrzebuję co najmniej 4.5, ale wolałbym najnowszą) - w rzeczywistości nie jest wysyłany z odpowiednim GCC na wszystkich (tyle że statki dzyń) i który wydaje się być problemem dla Homebrew ...

Znam listę niestandardowych GCC i kompilatorów krzyżowych, ale w rzeczywistości wszystkie te instalacje wymagają już zainstalowanego GCC - przynajmniej brewnie udaje im się to z błędami linkera w Lionie, które przypisuję Clangowi, i -use-gccnie działa to w sposób oczywisty powody.

brew doctor wspomina tylko to, co już wiem, że nie ma zainstalowanego GCC (4.2.x).


1 Wcześniej miksowałem MacPorts, Homebrew i kilka ręcznych instalacji i skończyłem z piekłem konserwacji i wersjonowania. Nie chcę tam iść ponownie.

Konrad Rudolph
źródło
Jaka jest wydajność gcc --version? Dostaję i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)i po prostu zainstalowałem Xcode z MAS. Jaka jest wydajność echo $PATH?
Gio
@Gio Mam taką samą wydajność. $PATHjest zwykle (w końcu jest to prawie pusty system): /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin… ale nie sądzę, żeby to miało znaczenie. Formuły dostarczone przez homebrew-alt są po prostu przestarzałe i nie działają z Clangiem.
Konrad Rudolph
1
Dlaczego warto korzystać z Homebrew? MacPorts dobrze zarządza wieloma wersjami kompilatorów. A MacPorts może zrobić wszystko , co może zrobić Homebrew.
Jeff Burdges
@JeffBurdges Homebrew jest lepszy. W prawie każdej kategorii.
Konrad Rudolph,
2
Jak to? Szczerze mówiąc, nie lubię Homebrew głównie dlatego, że brakuje w nim (a) opisów pakietów i (b) pakietów matematycznych. Ogólnie MacPorts ma może sześć razy więcej pakietów niż Homebrew, ale tak, to brakuje tych nieznanych pakietów. Ogólnie jestem zadowolony z MacPorts, choć oczywiście chciałbym, aby zintegrowali się z menedżerami pakietów językowych, takimi jak CPAN, CTAN, Caball itp.
Jeff Burdges

Odpowiedzi:

30

Rozwiązanie dostarczone przez @Konrad Rudolph nie jest już całkowicie poprawne, ponieważ wzmiankowana przez niego formuła GCC została przeniesiona homebrew/dupesdo homebrew/versions. Możesz wybrać wersję GCC do zainstalowania. Na przykład w momencie pisania tej odpowiedzi dostępne są wersje 4.5, 4.7 i 4.8. Możesz sprawdzić, jakie wersje są dostępne tutaj .

Krótko mówiąc, możesz zainstalować GCC 4.8 za pomocą

brew tap homebrew/versions
brew install [flags] gcc48

Możesz wyświetlić dostępne flagi instalacji, używając

brew options gcc48
yihangho
źródło
Próbowałem tego i mam go zainstalować, ale umiera w ten sposób:gcc-4.8 hello.c gcc-4.8: error trying to exec 'as': execvp: No such file or directory
Warren P
@WarrenP Czy instalowałeś z jakimś [flags]? Na moich komputerach zainstalowałem bez żadnych flag i działa dobrze. Dlaczego nie spróbować zadzwonić gcc-4.8bez pliku wejściowego i sprawdzić, czy wystąpił błąd krytyczny? Spróbuj także ls /usr/local/Cellar/gcc48/4.8.0/binsprawdzić, czy ten katalog zawiera gcc-4.8.
yihangho
Zawiera gcc-4.8 i gcc-4.8 --versiondziała, ale nie może wykonać drugiego narzędzia o nazwie, asdlatego umiera.
Warren P
Hmm ... Szczerze mówiąc nie mam pojęcia, jak to rozwiązać. Może musimy poczekać na bardziej doświadczonego użytkownika ...
yihangho
2
@nkint Albo to albo dodaj alias g++='g++-4.8'swoje .bashrc.
yihangho,
38

Rozwiązanie Homebrew

Aby odpowiedzieć na moje pytanie, homebrew-versionsteraz mam dość aktualną formułę GCC . Można go zainstalować za pomocą

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

Gdzie [flags]powinny zawierać wszystkie wymagane języki, np. ( --enable-cxx --enable-fortran).

Spowoduje to zainstalowanie plików wykonywalnych z przyrostkiem, tzn. gccNależy uzyskać do nich dostęp, gcc-versionaby uniknąć kolizji. W razie potrzeby można utworzyć odpowiednie dowiązania symboliczne, aby ustawić tę wersję jako domyślną.

Instalacja ręczna

Alternatywnie , aktualny GCC (w momencie pisania) można skompilować ręcznie przy użyciu następującego skryptu powłoki:

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

To wprowadzi GCC na ścieżkę /usr/gcc-4.7.0. Teraz wszystko, co musisz zrobić, to albo utworzyć dowiązania symboliczne do plików wykonywalnych, albo dodać binkatalog do $PATHzmiennej.

Konrad Rudolph
źródło
1
Próbując skompilować działającą wersję wina, natknąłem się również na problem z brakującym gcc - niestety instalacja v4.7 przez homebrew dała mi pewne błędy; więc wybrałem Apple v4.2 używając, brew tap homebrew/dupesa następnie brew install apple-gcc42. Pomogło mi to uzyskać działające gcc i wino. Możesz także pobrać pliki binarne (jak robi to homebrew): r.research.att.com/tools
iolsmit
@iolsmit Zdecydowanie powinieneś spróbować ponownie zainstalować GCC 4.7 z czystym, aktualnym Homebrew. Powinno działać jak urok. Jeśli nie, zgłoś błąd do opiekunów Homebrew-dupes.
Konrad Rudolph
3
brew tap homebrew/dupes; brew install gcc --use-llvm. Zobacz github.com/Homebrew/homebrew-dupes/issues/20
PHS
@KonradRudolph, gdziekolwiek się obracam, odpowiadasz na pytania, które zadaję! Dzięki :)
Rik Smith-Unna
1
@Warren Nie trzeba krzyczeć - ale dzięki za przypomnienie, ponieważ yihang opublikował lepszą, aktualną odpowiedź, którą teraz zaakceptowałem.
Konrad Rudolph
13

Widziałem dziś, jak ktoś link do tego starego postu. Najlepszym sposobem na zainstalowanie GCC w homebrew jest teraz brew install gcc. Jeśli masz narzędzia wiersza polecenia XCode (są one oddzielne od XCode; możesz je zainstalować przy pomocy xcode-select --install), zainstalowana zostanie wersja wstępnie skompilowana (która jest bardzo szybka).

Tim Smith
źródło
3

Ja też miałem ten problem. Co więcej, muszę użyć gfortran, który nie jest dostarczany ze standardową (nieaktualną) instalacją llvm-gcc dla Maca.

Odkryłem, że wersje gcc High Performance Computing są aktualne i świetnie działają na Lion.

cm2
źródło
Próbowałem tego. Nie tylko nie zadziałało, ale technika instalacji, której używa, jest dość niebezpieczna. Zajęło mi około godziny, aby wszystko ostrożnie cofnąć.
Bob Aman
2
Powinienem był powiedzieć, że nie instaluję go tak, jak sugeruje. Po prostu rozpakowuję plik i tworzę dowiązanie symboliczne do pliku binarnego, którego chcę, upewniając się, że dowiązanie symboliczne jest gdzieś w mojej ŚCIEŻCE. Zazwyczaj robi się to przez dodanie do mojej ścieżki czegoś „lokalnego”, na przykład ~ / bin / lub czegoś innego.
cm2
Tak, byłoby to znacznie bardziej rozsądne. Jego procedura instalacyjna to wariactwo, a ja powinienem był raczej założyć tyle samo, niż ślepo.
Bob Aman
3

W przypadku, gdy ktoś patrzy na ten stary wątek, wydaje się, że homebrew / wersje, użyte w obecnie akceptowanej odpowiedzi, są przestarzałe na rzecz homebrew / core . Po prostu biegnij brew install <formula>.

Avi
źródło
Czy możesz wyjaśnić, jak to ma się do pytania PO, jak zainstalować GCC przez Homebrew?
fsb
@fsb Odpowiedź została zaktualizowana.
Avi
To jest bardziej komentarz do zaakceptowanej odpowiedzi. Nie powinna to być sama odpowiedź, ponieważ nie dotyczy pytania PO. Po uzyskaniu wystarczającej reputacji będziesz mógł dodawać komentarze i zadawać pytania uzupełniające. Aby zyskać reputację, odpowiedz na pytania, które są jasne i zwięzłe .
fsb
Czy należy zadać nowe pytanie, aby określić wersję naparu, w którym to się zmienia? Naprawienie tego starego postu wydaje się mało korzystne, duże opóźnienie.
bmike
Gdybym miał wystarczającą liczbę punktów reputacji, skomentowałbym zaakceptowane rozwiązanie. Możesz to zrobić samemu.
Avi
0

Możesz spróbować tego - https://github.com/kennethreitz/osx-gcc-installer - Użyłem go z powodzeniem po aktualizacji do Lion do kompilacji pakietów z Homebrew i innymi (Ruby).

Z przeczytanego mi:

Instalator GCC dla OSX Pobieranie i instalowanie ogromnego instalatora Xcode jest dużym problemem, jeśli chcesz tylko GCC i powiązanych narzędzi.

Instalator osx-gcc-installer pozwala zainstalować niezbędne kompilatory z gotowych pakietów binarnych lub pomaga stworzyć własny instalator.

Darren Newton
źródło
To tylko instaluje wersje zainstalowane również przez Xcode. Innymi słowy: przestarzały, a właściwie nie GCC, ale LLVM-GCC.
Konrad Rudolph
1
Nieaktualne: Tak. Chodzi o to, że to narzędzia dostarczane przez Xcode, ale bez wszystkich innych ogromnych komponentów niezbędnych do Xcode. Nie GNU GCC: Źle. /usr/bin/gccjest dowiązaniem symbolicznym do llvm gcc, ale wyraźne odniesienie /usr/bin/gcc-4.2lub ustawienie export CC="gcc-4.2"w twoim pliku .bash_profile lub odpowiednim pliku również łagodzi ten problem. (Zobacz także to pytanie dotyczące przepełnienia stosu .)
Jason Salaz,
2
Pamiętaj, że ten projekt został zastąpiony przez oficjalne narzędzia wiersza polecenia Apple dla Xcode: kennethreitz.org/essays/xcode-gcc-and-homebrew
Arto Bendiken