Recientemente he instalado gcc 4.8
usando brew
el OSX 10.7.5 (Lion)
. Ahora puedo compilar gcc 4.8
usando
g++-4.8 some_file.c
o usando el predeterminado gcc 4.2
usando
g++ some_file.c
Quiero usar gcc 4.8
como compilador predeterminado para Xcode
y si escribo gcc
en la terminal. Supongo que debo alterar los gcc-related
enlaces dentro dirname $(which gcc)
.
Cuando lo hago
ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'
Me sale lo siguiente:
lrwxr-xr-x 1 root wheel 7 Jul 31 12:17 c++ -> clang++
-rwxr-xr-x 1 root wheel 909360 Nov 18 2011 c++filt
lrwxr-xr-x 1 root wheel 5 Jul 31 12:17 clang++ -> clang
lrwxr-xr-x 1 root wheel 12 Jul 31 12:17 g++ -> llvm-g++-4.2
lrwxr-xr-x 1 root wheel 12 Jul 31 12:17 gcc -> llvm-gcc-4.2
lrwxr-xr-x 1 root wheel 28 Jul 31 12:17 gcov-4.2 -> ../llvm-gcc-4.2/bin/gcov-4.2
lrwxr-xr-x 1 root wheel 52 Jul 31 12:17 i686-apple-darwin11-llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-g++-4.2
lrwxr-xr-x 1 root wheel 52 Jul 31 12:17 i686-apple-darwin11-llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/i686-apple-darwin11-llvm-gcc-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-cpp-4.2 -> ../llvm-gcc-4.2/bin/llvm-cpp-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-g++ -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-g++-4.2 -> ../llvm-gcc-4.2/bin/llvm-g++-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-gcc -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2
lrwxr-xr-x 1 root wheel 32 Jul 31 12:17 llvm-gcc-4.2 -> ../llvm-gcc-4.2/bin/llvm-gcc-4.2
Cuando corro: which gcc-4.8
me sale /usr/local/bin/gcc-4.8
.
Los pasos para hacer esto serían muy útiles.
Por favor y gracias.
clang 3.3
el equivalente agcc 4.8
? Creo que puedobrew install
hacerlo también.Respuestas:
Suponiendo que está utilizando bash (es el valor predeterminado), puede agregar / usr / local / bin como su principal prioridad en PATH de esta manera:
Esto asegurará que / usr / local / bin esté marcado antes que todas las demás áreas de su ruta. Luego, simplemente inicie una nueva sesión de terminal para cargar la nueva variable.
Otra forma de hacer esto:
fuente
usr/local/bin
.echo $PATH
revela: / opt / local / bin: / opt / local / sbin: / opt / local / include: / usr / local / mysql / bin: / usr / bin / bjam: / usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin: / usr / local / go / bin: / usr / texbin/usr/local/bin
para aparecer en primer lugarPATH
, lo que no tuvo ningún efecto, la llamadagcc
todavía se vegcc 4.2
. Luego, creé manualmente los enlaces simbólicos, pero cuando abro una nueva ventana de terminal yg++
(occ|c++|gcc
) no se encuentran todos. Extraño. Gracias por su ayuda/usr/bin
de cualquier Unix (que es MacOS X) ... a menos que sea un especialista trabajando en las fuentes de una nueva versión de la próxima versión de Unix ☺.Gracias a todos por su ayuda. Terminé simplemente creando alias de la
~/.bash_profile
siguiente manera:La respuesta de Lynken es muy útil, pero la adapté con alias, ya que es más fácil de deshacer si es necesario.
Específicamente, si
PATH
se configura de manera tal que/usr/local/bin
(donde brew pone el enlacegcc 4.8
) aparece antes de que aparezca/usr/bin
(dondegcc
está vinculado de forma predeterminada), entonces la creación de enlaces como Lyken sugirió en/usr/local/bin
teoría debería funcionar para mí. En la práctica, no lo hace por alguna razón: fallar con un error de enlazador y los alias evitan ese error sin que yo también necesite resolver ese problema.El otro beneficio de los alias es que no tengo que vincular lo que quiero que maneje homebrew y no tener que competir con esa herramienta para la cual está vinculada la versión de gcc
/usr/local
fuente
/usr/local/bin
. También puede tener otros binarios instalados y ocultos debido al mal posicionamiento de/usr/local/bin
su RUTA. Considere una vez más mi respuesta, está atacando su problema real una vez, correctamente y para siempre.PATH
y puse/usr/local/bin
antes de todo. Admito que su declaración es correcta y que necesitaba modificarlaPATH
, pero (en mi caso, es decir, labrew
instalación predeterminada degcc 4.8
), aún no llamarégcc 4.8
de manera predeterminada cuando llamegcc
porque no hay un enlace simbólico entre los dos de manera predeterminada. Tuve que crearlo manualmente como lo hice anteriormente.gcc
directamente desde la terminal. Si todavía usa un archivo MAKE,clang
solo encontré este problema al usar una opción de compilador que solo está disponible engcc
.Yo uso para gcc-4.8:
y de vuelta a apple gcc:
o póngalo en el archivo y luego:
source <file>
fuente
Supongamos que su inicialización de shell real se realiza
~/.profile
, luego tendrá que modificarla para/usr/local/bin
adelantar a cualquier otro componente PATH dondegcc
y todos sus binarios asociados estén.Aquí está la forma de realizar esta modificación limpia:
Cuidado: si
~/.profile
ya está estructurado, este script de shell tendrá que ajustarse manualmente para que se ajuste a la definición correcta de RUTA en el lugar correcto.fuente
PATH
lo que/usr/local/bin
se ve primero. Esto probablemente me ahorrará dolores de cabeza en el futuro. Desearía poder hacer +1 en ti. Sin embargo, mi problema es quegcc
todavía está vinculadogcc 4.2
y nogcc 4.8
porque no haya un enlace simbólicogcc -> gcc-4.8
en/usr/local/bin
. Todavía necesitaría un aliasgcc
comogcc-4.8
dentro~/.profile
o un enlace simbólico (ln -s gcc-4.8 gcc
)/usr/local/bin
después de actualizarPATH
con su script. ¿S.M?brew
que no haya agregado los enlaces simbólicos correctos. ¿Leyó esta respuesta sobre el mismo tema: apple.stackexchange.com/a/38247/22003 ?Se supone que la creación de alias o enlaces a diferentes binarios de gcc les hará usar su propia inclusión antes de la carpeta de inclusión predeterminada del sistema.
fuente