Recientemente he instalado gcc 4.8usando brewel OSX 10.7.5 (Lion). Ahora puedo compilar gcc 4.8usando
g++-4.8 some_file.c
o usando el predeterminado gcc 4.2usando
g++ some_file.c
Quiero usar gcc 4.8como compilador predeterminado para Xcodey si escribo gccen la terminal. Supongo que debo alterar los gcc-relatedenlaces 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.8me sale /usr/local/bin/gcc-4.8.
Los pasos para hacer esto serían muy útiles.
Por favor y gracias.

clang 3.3el equivalente agcc 4.8? Creo que puedobrew installhacerlo 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 $PATHrevela: / 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/binpara aparecer en primer lugarPATH, lo que no tuvo ningún efecto, la llamadagcctodaví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/binde 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_profilesiguiente 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
PATHse configura de manera tal que/usr/local/bin(donde brew pone el enlacegcc 4.8) aparece antes de que aparezca/usr/bin(dondegccestá vinculado de forma predeterminada), entonces la creación de enlaces como Lyken sugirió en/usr/local/binteorí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/localfuente
/usr/local/bin. También puede tener otros binarios instalados y ocultos debido al mal posicionamiento de/usr/local/binsu RUTA. Considere una vez más mi respuesta, está atacando su problema real una vez, correctamente y para siempre.PATHy puse/usr/local/binantes de todo. Admito que su declaración es correcta y que necesitaba modificarlaPATH, pero (en mi caso, es decir, labrewinstalación predeterminada degcc 4.8), aún no llamarégcc 4.8de manera predeterminada cuando llamegccporque no hay un enlace simbólico entre los dos de manera predeterminada. Tuve que crearlo manualmente como lo hice anteriormente.gccdirectamente desde la terminal. Si todavía usa un archivo MAKE,clangsolo 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/binadelantar a cualquier otro componente PATH dondegccy todos sus binarios asociados estén.Aquí está la forma de realizar esta modificación limpia:
discos compactos _shell_init = `egrep '(^ |) PATH' .profile 2> / dev / null` if ["$ {_ shell_init}" = ""]; luego # PATH no está definido en .profile # instalar allí la primera definición relativa de RUTA echo 'RUTA = / usr / local / bin: $ {RUTA} export PATH '>>. profile . .perfil exec $ {SHELL} más # eliminar todas las ocurrencias de / usr / local / bin donde sea que estén # establecer en RUTA e insertarlo antes que todos los demás componentes sed -E -e '/ (^ |) PATH = / s,: / usr / local / bin ,,' \ -e '/ (^ |) RUTA = / s, / usr / local / bin: ,,' \ -e '/ (^ |) PATH = / s ,, & / usr / local / bin :,' .profile> .profile.new mv .profile.new .profile . .perfil exec $ {SHELL} fiCuidado: si
~/.profileya 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
PATHlo que/usr/local/binse ve primero. Esto probablemente me ahorrará dolores de cabeza en el futuro. Desearía poder hacer +1 en ti. Sin embargo, mi problema es quegcctodavía está vinculadogcc 4.2y nogcc 4.8porque no haya un enlace simbólicogcc -> gcc-4.8en/usr/local/bin. Todavía necesitaría un aliasgcccomogcc-4.8dentro~/.profileo un enlace simbólico (ln -s gcc-4.8 gcc)/usr/local/bindespués de actualizarPATHcon su script. ¿S.M?brewque 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