Como usar o gcc 4.9 quando ele é instalado no mesmo diretório que o gcc mais recente

0

Eu instalei o gcc 5 e o gcc 4.9 no mesmo diretório ( /usr/bin ). Usar nvcc com --compiler-bindir é impossível, pois os dois gcc s estão no mesmo diretório.

Eu preciso executar o comando nvcc --compiler-bindir /path/with/older/gcc/directory . É possível fazer isso quando ambos os gccs estão no mesmo diretório?

    
por Snurka Bill 23.12.2015 / 14:29

1 resposta

4

% bl0ck_qu0te%

Segue-se um excerto dos documentos do kit de ferramentas CUDA (no link ):

% bl0ck_qu0te%

Com base nisso, você pode tecnicamente "forçar" uma versão gcc e g++ a ser disponibilizada temporariamente pela metodologia na minha resposta agora excluída ...

Existe uma razão pela qual o update-alternatives existe - foi criado para "symlink" gcc e semelhante aos nomes dos executáveis real . Na realidade, /usr/bin/gcc-4.9 é realmente o executável do compilador gcc 4.9, e gcc apenas simboliza para /etc/alternatives/gcc , que por sua vez é um link simbólico para o executável gcc real

No meu ambiente 14.04 isso é mostrado aqui:

% file /usr/bin/gcc
/usr/bin/gcc: symbolic link to '/etc/alternatives/gcc' 
% file /etc/alternatives/gcc
/etc/alternatives/gcc: symbolic link to '/usr/bin/gcc-4.8' 

Na verdade, tenho muitas versões do GCC aqui, de 4,6 a 4,9, mas isso também se aplica a outras versões.

Para alterar a alternativa temporariamente, você pode fazê-lo com este comando: sudo update-alternatives --config gcc

Isso é o que mostra no meu sistema, com um cursor piscante no final:

% sudo update-alternatives --config gcc
There are 4 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
* 0            /usr/bin/gcc-4.8   60        auto mode
  1            /usr/bin/gcc-4.6   30        manual mode
  2            /usr/bin/gcc-4.7   50        manual mode
  3            /usr/bin/gcc-4.8   60        manual mode
  4            /usr/bin/gcc-4.9   40        manual mode

Press enter to keep the current choice[*], or type selection number: 

Eu refiz manualmente as prioridades, mas você pode ver que eu posso selecionar manualmente qual compilador eu quero usar nesse ínterim. Portanto, você pode alterar isso temporariamente e, em seguida, alterná-lo para o gcc desejado e, em seguida, alterná-lo quando terminar.

Isso deve, então, permitir que você use temporariamente um compilador por gcc ou g++ invocação, em vez de precisar especificar um diretório do compilador.

Observe que isso provavelmente precisará ser feito também para g++ - especialmente considerando o snippet dos documentos acima. Portanto, use g++ de gcc para alterar a versão de g++ 'para usar'.

O problema é que não vejo nenhuma maneira mais fácil do que isso, neste caso. Então, toda vez que você entrar e alterar o compilador dessa maneira, para recuperá-lo para o padrão, será necessário executar novamente os comandos update-alternatives para reconfigurá-lo de volta ao que era.

Como alternativa, você pode tentar usar a solução proposta pelo steeldriver , que aponta para outra solução em potencial Site Unix e Linux):

% bl0ck_qu0te%

Não tenho certeza se essa abordagem funcionará, com base no trecho de documentação que eu li, mas pode funcionar, já que a resposta já está disponível há algum tempo.

    
por Thomas Ward 23.12.2015 / 15:27