¿Cómo instalo GCC a través de Homebrew?

79

Estoy usando Homebrew exclusivamente (es decir, no uso y no utilizaré MacPorts o Fink). También quiero mantener las instalaciones manuales al mínimo. 1

... Pero, ¿cómo puedo instalar GCC?

En primer lugar, por supuesto, he instalado Xcode, pero la versión actual no se envía con un GCC bastante actualizado (necesito un mínimo de 4.5, pero preferiría el más reciente); de hecho, no se envía con un GCC adecuada en todo (sólo barcos Clang) y que parece ser un problema para Homebrew ...

Conozco una lista de GCC personalizados y compiladores cruzados, pero de hecho, todas esas instalaciones requieren un GCC ya instalado, al menos, brewfallan con errores de enlazador en Lion que atribuyo a Clang, y -use-gccno funciona para obvio razones.

brew doctor solo menciona lo que ya sé, que no hay GCC (4.2.x) instalado.


1 Anteriormente mezclé MacPorts, Homebrew y algunas instalaciones manuales y terminé con un infierno de mantenimiento y versiones. No quiero ir allí de nuevo.

Konrad Rudolph
fuente
¿Cuál es el resultado de gcc --version? Obtuve i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)y simplemente instalé Xcode desde el MAS. Además, ¿cuál es la salida de echo $PATH?
Gio
@Gio obtuve el mismo resultado. $PATHes lo habitual (este es un sistema casi en blanco, después de todo): /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin... pero no creo que esto importe. Las fórmulas proporcionadas por homebrew-alt simplemente están desactualizadas y no funcionan con Clang.
Konrad Rudolph el
1
¿Por qué usar Homebrew? MacPorts es bueno en la gestión de múltiples versiones de compiladores. Y MacPorts puede hacer cualquier cosa que Homebrew pueda hacer.
Jeff Burdges
@JeffBurdges Homebrew es mejor. En casi cualquier categoría.
Konrad Rudolph
2
¿Cómo es eso? Para ser sincero, no me gusta Homebrew principalmente porque carece de (a) descripciones de paquetes y (b) paquetes matemáticos. En general, MacPorts tiene quizás seis veces más paquetes que Homebrew, pero sí, son los paquetes oscuros los que faltan. Estoy contento con MacPorts en general, aunque obviamente desearía que se integraran con los administradores de paquetes de idiomas como CPAN, CTAN, Caball, etc.
Jeff Burdges

Respuestas:

30

La solución proporcionada por @Konrad Rudolph ya no es del todo correcta, ya que la fórmula del CCG que mencionó se trasladó de homebrew/dupesa homebrew/versions. Puede elegir qué versión de GCC instalar. Por ejemplo, al momento de escribir esta respuesta, las versiones 4.5, 4.7 y 4.8 están disponibles. Puede consultar qué versiones están disponibles aquí .

En resumen, puede instalar GCC 4.8 utilizando

brew tap homebrew/versions
brew install [flags] gcc48

Puede ver los indicadores de instalación disponibles utilizando

brew options gcc48
yihangho
fuente
Intenté esto y lo instalé pero muere así:gcc-4.8 hello.c gcc-4.8: error trying to exec 'as': execvp: No such file or directory
Warren P
@WarrenP ¿Instalaste con alguno [flags]? En mis máquinas, lo instalé sin banderas y funciona bien. ¿Por qué no intentas llamar gcc-4.8sin ningún archivo de entrada y ver si obtienes un error fatal? También intente ls /usr/local/Cellar/gcc48/4.8.0/biny vea si ese directorio contiene gcc-4.8.
yihangho
Contiene gcc-4.8 y se gcc-4.8 --versionejecuta, pero no se puede ejecutar a la herramienta secundaria llamada asy, por lo tanto, muere.
Warren P
Hmm ... Francamente, no tengo idea de cómo resolver esto. Tal vez tengamos que esperar a algún usuario más experimentado ...
yihangho
2
@nkint O eso o agregue alias g++='g++-4.8'su .bashrc.
yihangho
38

Solución casera

Para responder a mi propia pregunta, homebrew-versionsahora tiene una fórmula bastante actualizada de GCC . Se puede instalar usando

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

Donde [flags]debe incluir todos los idiomas requeridos, por ejemplo ( --enable-cxx --enable-fortran).

Esto instalará los ejecutables con un sufijo, es decir, gccse debe acceder gcc-versionpara evitar conflictos. Si es necesario, se pueden crear enlaces simbólicos apropiados para que esta versión sea la predeterminada.

Instalación manual

Alternativamente , un GCC actualizado (en el momento de la escritura) puede compilarse manualmente usando el siguiente script de shell:

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

Esto colocará a GCC en el camino /usr/gcc-4.7.0. Ahora todo lo que necesita hacer es crear enlaces simbólicos a los ejecutables o agregar el bindirectorio a la $PATHvariable.

Konrad Rudolph
fuente
1
Intentando compilar una versión funcional de wine, también me encontré con el problema de un gcc faltante; desafortunadamente, instalar v4.7 a través de homebrew me dio algunos errores; así que fui por Apple v4.2 usando brew tap homebrew/dupesseguido de brew install apple-gcc42. Esto me ayudó a conseguir un gcc y un vino que funcionen. También puede obtener los archivos binarios (como lo hace homebrew) desde aquí: r.research.att.com/tools
iolsmit
@iolsmit Definitivamente deberías probar la instalación de GCC 4.7 nuevamente con un Homebrew limpio y actualizado. Debería funcionar como un encanto. De lo contrario, presente un error a los mantenedores de Homebrew-dupes.
Konrad Rudolph
3
brew tap homebrew/dupes; brew install gcc --use-llvm. Ver github.com/Homebrew/homebrew-dupes/issues/20
phs
@KonradRudolph donde quiera que vaya, ¡estás respondiendo las preguntas que hago! Gracias :)
Rik Smith-Unna
1
@Warren No hay necesidad de gritar, pero gracias por el recordatorio, porque yihang ha publicado una respuesta mejor y actualizada que ahora he aceptado.
Konrad Rudolph el
13

Hoy vi a alguien vincularse a esta vieja publicación. La mejor manera de instalar GCC en homebrew en este momento es simplemente brew install gcc. Si tiene xcode-select --installinstaladas las herramientas de línea de comandos XCode (están separadas de XCode; puede instalarlas ), se instalará una versión precompilada (que es muy rápida).

Tim Smith
fuente
3

Yo también tuve este problema. Además, necesito usar gfortran, que no viene con la instalación estándar (obsoleta) de llvm-gcc de Mac.

He descubierto que las compilaciones de computación de alto rendimiento de gcc están actualizadas y funcionan muy bien en Lion.

cm2
fuente
Intenté esto No solo no funcionó, sino que la técnica de instalación que está usando es bastante peligrosa. Me llevó aproximadamente una hora deshacer todo con cuidado.
Bob Aman el
2
Oh, debería haber dicho que no lo instalo como él sugiere. Simplemente descomprimo el archivo y hago un enlace simbólico al binario que quiero, asegurándome de que el enlace simbólico esté en algún lugar de mi RUTA. Por lo general, esto se hace agregando algo "local" a mi ruta, como ~ / bin / o algo así.
cm2
Sí, eso sería mucho más cuerdo. Su procedimiento de instalación está volviendo loco y debería haber asumido lo mismo en lugar de intentarlo a ciegas.
Bob Aman
3

En caso de que alguien vea este viejo hilo, parece que homebrew / versiones, usadas en la respuesta actualmente aceptada, han quedado en desuso a favor de homebrew / core . Solo corre brew install <formula>.

Avi
fuente
¿Puede explicar cómo tiene que ver esto con la pregunta del OP, que es cómo instalar GCC a través de Homebrew?
fsb
@fsb La respuesta se actualiza.
Avi
Este es más un comentario sobre la respuesta aceptada. No debería ser una respuesta en sí misma porque no aborda la pregunta de los OP. Una vez que tenga suficiente reputación , podrá agregar comentarios y hacer preguntas de seguimiento. Para ganar reputación, responda preguntas que sean claras y concisas .
fsb
¿Debería hacerse una nueva pregunta para especificar la versión de brew donde esto cambia? Arreglar esta publicación anterior parece de bajo beneficio, alto retraso.
bmike
Si tuviera suficientes puntos de reputación, habría comentado la solución aceptada. Siéntase libre de hacerlo usted mismo.
Avi
0

Puede probar esto: https://github.com/kennethreitz/osx-gcc-installer : lo he utilizado con éxito después de actualizar a Lion para compilar paquetes con Homebrew y otros (Ruby).

De la leeme:

Instalador OSX GCC Descargar e instalar el instalador masivo de Xcode es una gran molestia si solo desea GCC y herramientas relacionadas.

El instalador osx-gcc le permite instalar los compiladores esenciales desde paquetes binarios precompilados o lo ayuda a crear su propio instalador.

Darren Newton
fuente
Esto solo instala las versiones también instaladas por Xcode. En otras palabras: anticuado, y no en realidad GCC sino LLVM-GCC.
Konrad Rudolph el
1
Anticuado: sí. El objetivo del paquete es que son las utilidades enviadas por Xcode, pero sin todos los otros componentes enormes necesarios para Xcode. No GNU GCC: Incorrecto. /usr/bin/gcces un enlace simbólico a llvm gcc, pero la referencia explícita /usr/bin/gcc-4.2o la configuración export CC="gcc-4.2"en su archivo .bash_profile o en el archivo adecuado también mitigan el problema. (Véase también esta pregunta de desbordamiento de pila .)
Jason Salaz
2
Tenga en cuenta que este proyecto ha sido reemplazado por las herramientas de línea de comandos oficiales de Apple para Xcode: kennethreitz.org/essays/xcode-gcc-and-homebrew
Arto Bendiken