Recientemente instalé gcc 4.8
usando brew
en OSX 10.7.5 (Lion)
. Ahora puedo compilar usando gcc 4.8
usando
g++-4.8 some_file.c
o usando el valor 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 modificar los gcc-related
enlaces dentro de 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
obtengo /usr/local/bin/gcc-4.8
.
Los pasos para hacer esto serían muy útiles.
Por favor y gracias.
Suponiendo que está usando bash (es el valor predeterminado), puede agregar /usr/local/bin como su principal prioridad en PATH de esta manera:
echo "PATH=\"/usr/local/bin:$PATH\"" >> ~/.bash_profile
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:
cd /usr/bin
rm cc gcc c++ g++
ln -s /usr/local/bin/gcc-4.8 cc
ln -s /usr/local/bin/gcc-4.8 gcc
ln -s /usr/local/bin/c++-4.8 c++
ln -s /usr/local/bin/g++-4.8 g++
Gracias a todos por su ayuda. Terminé simplemente creando alias dentro ~/.bash_profile
de la siguiente manera:
alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'
La respuesta de Lynken es muy útil, pero la adapté con alias, ya que es más fácil para mí deshacer si es necesario.
Específicamente, si PATH
está configurado de tal manera que /usr/local/bin
(donde brew coloca el enlace gcc 4.8
) aparece antes de que aparezca /usr/bin
(donde gcc
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 es así por alguna razón: fallar con un error de vinculación y los alias solucionan ese error sin que yo necesite resolver ese problema también.
El otro beneficio de los alias es que no tengo que vincular lo que quiero que homebrew maneje y no tengo que competir con esa herramienta para la que está vinculada la versión de gcc/usr/local
Yo uso gcc-4.8:
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
export CPP=/usr/local/bin/cpp
export LD=/usr/local/bin/gcc
alias c++=/usr/local/bin/c++
alias g++=/usr/local/bin/g++
alias gcc=/usr/local/bin/gcc
alias cpp=/usr/local/bin/cpp
alias ld=/usr/local/bin/gcc
alias cc=/usr/local/bin/gcc
y de vuelta a apple gcc:
export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
export CPP=/usr/bin/cpp
export LD=/usr/bin/ld
alias c++=/usr/bin/c++
alias g++=/usr/bin/g++
alias gcc=/usr/bin/gcc
alias cpp=/usr/bin/cpp
alias cc=/usr/bin/gcc
alias ld=/usr/bin/ld
o ponerlo en el archivo y luego:source <file>
Supongamos que su inicialización de shell real se realiza a través ~/.profile
de , luego tendrá que modificarlo para colocarlo /usr/local/bin
por delante de cualquier otro componente PATH donde se encuentren gcc
todos sus binarios asociados.
Esta es la forma de realizar esta modificación limpia:
discos compactos _shell_init=`egrep '(^| )RUTA' .perfil 2>/dev/null` si [ "${_shell_init}" = "" ] ; después # PATH no está definido en .profile # instalar allí la primera definición relativa de PATH echo 'RUTA=/usr/local/bin:${RUTA} exportar RUTA' >>.perfil . .perfil ejecutivo ${SHELL} más # eliminar todas las apariciones de /usr/local/bin donde sea que estén # establezca en PATH e insértelo antes de todos los demás componentes sed -E -e '/(^| )PATH=/s,:/usr/local/bin,,' \ -e '/(^| )RUTA=/s,/usr/local/bin:,,' \ -e '/(^| )RUTA=/s,,&/usr/local/bin:,' .perfil >.perfil.nuevo mv .perfil.nuevo .perfil . .perfil ejecutivo ${SHELL} fi
Cuidado: si ~/.profile
ya está estructurado, este script de shell deberá ajustarse manualmente para que se ajuste a la definición de PATH correcta en el lugar correcto.
PATH
modo que /usr/local/bin
se vea primero. Esto probablemente me ahorrará dolores de cabeza en el futuro. Ojalá pudiera hacer +1 en ti. Sin embargo, mi problema es que gcc
todavía está vinculado gcc 4.2
y no gcc 4.8
porque no haya un enlace simbólico gcc -> gcc-4.8
para /usr/local/bin
. Todavía necesitaría un alias gcc
como gcc-4.8
dentro ~/.profile
o un enlace simbólico ( ln -s gcc-4.8 gcc
) /usr/local/bin
después de actualizar PATH
con su secuencia de comandos. ¿S.M?brew
que no haya agregado los enlaces simbólicos correctos. ¿Leíste esta respuesta sobre el mismo tema: apple.stackexchange.com/a/38247/22003 ?Se supone que la creación de alias o la vinculación a diferentes archivos binarios de gcc hará que utilicen su propia carpeta de inclusión antes de la carpeta de inclusión predeterminada del sistema.
BSO
sudo rm -rf
no solorm
ysudo ln
no simplementeln
Jacobo
csrutil disable
en modo Reiniciar en Mac.