Eu instalei recentemente gcc 4.8
usando brew
on OSX 10.7.5 (Lion)
. Agora posso compilar usando gcc 4.8
usando
g++-4.8 some_file.c
ou usando o padrão gcc 4.2
usando
g++ some_file.c
Eu quero usar gcc 4.8
como o compilador padrão para Xcode
e se eu digitar gcc
no terminal. Suponho que devo alterar os gcc-related
links internos dirname $(which gcc)
.
Quando eu faço
ls -al $(dirname $(which gcc)) | grep 'gcc\|g++\|c++'
Eu recebo o seguinte:
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
Quando eu corro: which gcc-4.8
eu entendo /usr/local/bin/gcc-4.8
.
Passos para fazer isso seriam muito úteis.
Por favor e obrigado.
clang 3.3
o equivalente agcc 4.8
? Eu acredito que possobrew install
também.Respostas:
Supondo que você esteja usando o bash (é o padrão), você poderá adicionar / usr / local / bin como sua principal prioridade no PATH da seguinte maneira:
Isso garantirá que / usr / local / bin seja verificado antes de todas as outras áreas do seu caminho. Em seguida, basta iniciar uma nova sessão do terminal para carregar a nova variável.
Outra maneira de fazer isso:
fonte
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 / Você pode usar o seguinte comando: sbin: / sbin: / usr / local / bin: / usr / X11 / bin: / usr / local / go / bin: / usr / texbin/usr/local/bin
para aparecer em primeiro lugarPATH
- o que não teve efeito - a chamadagcc
ainda olhagcc 4.2
. Eu criei manualmente os links simbólicos, mas quando abro uma nova janela do terminal eg++
ou (cc|c++|gcc
) todos não são encontrados. Estranho. Obrigado pela vossa ajuda/usr/bin
de qualquer Unix (que é o MacOS X) ... a menos que você seja um especialista trabalhando nas fontes de uma nova versão da próxima versão do Unix ☺.Obrigado a todos pela ajuda. Acabei criando aliases da
~/.bash_profile
seguinte maneira:A resposta do Lynken é muito útil, mas eu a adaptei com aliases, pois é mais fácil desfazer isso, se necessário.
Especificamente, se
PATH
estiver definido de forma que/usr/local/bin
(onde o brew coloca o linkgcc 4.8
) apareça antes de aparecer/usr/bin
(ondegcc
está vinculado por padrão), a criação de links conforme sugerido por Lyken dentro/usr/local/bin
deve, teoricamente, funcionar para mim. Na prática, isso não ocorre por algum motivo - falhar com um erro de vinculador e aliases soluciona esse erro sem que eu precise resolver esse problema também.O outro benefício dos aliases é que não tenho que vincular o que quero que o homebrew manipule e não tenho que competir com a ferramenta pela qual a versão do gcc está vinculada
/usr/local
fonte
/usr/local/bin
. Você também pode ter outros binários instalados e ocultos devido ao mau posicionamento/usr/local/bin
no seu PATH. Por favor, considere mais uma vez a minha resposta, está atacando seu problema real uma vez, corretamente e para sempre.PATH
e coloquei/usr/local/bin
antes de tudo. Eu admito que sua declaração está correta e que eu precisava alterarPATH
, mas (no meu caso - por exemplo,brew
instalação padrãogcc 4.8
) eu ainda não chamareigcc 4.8
por padrão quando eu ligar,gcc
porque não há vínculo simbólico entre os dois por padrão. Eu tive que criá-lo manualmente, como fiz acima.gcc
diretamente do terminal. Se você usa um makefile,clang
ainda é usado, encontrei esse problema apenas ao usar uma opção de compilador disponível apenas emgcc
.Eu uso o gcc-4.8:
e de volta ao apple gcc:
ou coloque-o no arquivo e depois:
source <file>
fonte
Vamos supor que a inicialização real do shell seja feita
~/.profile
, então você terá que modificá-lo para colocar/usr/local/bin
à frente de qualquer outro componente PATH ondegcc
e todos os seus binários associados.Aqui está a maneira de executar esta modificação limpa:
Cuidado: se o seu
~/.profile
já estiver estruturado, esse script de shell precisará ser ajustado manualmente para ajustar a definição PATH correta no lugar certo.fonte
PATH
para que/usr/local/bin
seja visto primeiro. Isso provavelmente me salvará dores de cabeça no futuro. Eu gostaria de poder marcar você com +1. Meu problema é que emboragcc
ainda está ligado aogcc 4.2
e nãogcc 4.8
porque não há nenhuma ligação simbólica paragcc -> gcc-4.8
nos/usr/local/bin
. Eu ainda precisaria usar o aliasgcc
comogcc-4.8
dentro~/.profile
ou o link simbólico (ln -s gcc-4.8 gcc
)/usr/local/bin
depois de atualizarPATH
com seu script. Vós?brew
por não adicionar os links simbólicos corretos. Você leu esta resposta sobre o mesmo assunto: apple.stackexchange.com/a/38247/22003 ?Supõe-se que o alias de criação ou o link para binários diferentes do gcc os façam usar sua própria inclusão antes da pasta de inclusão do sistema padrão.
fonte