16.04 clang: seleção ruim de toolchain do gcc

2

Eu tenho dois sistemas 16.04 com gcc (5.4.0 e 6.0.0) e clang 3.8 (1: 3.8-33ubuntu3.1). No primeiro sistema, o clang consegue compilar o código C ++; com a adição de -v, as partes de saída essenciais são:

Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
[...]
#include <...> search starts here:
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/x86_64-linux-gnu/c++/5.4.0
 /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0/../../../../include/c++/5.4.0/backward
 /usr/local/include
 /usr/lib/llvm-3.8/bin/../lib/clang/3.8.0/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

Mas, em outro sistema, ele falha; saída detalhada mostra

Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/6.0.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/5.4.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.0.0
Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0

Mas o GCC6 nesta versão não contém cabeçalhos, por isso a compilação falha:

#include <...> search starts here:
 /usr/bin/../lib/gcc/x86_64-linux-gnu/6.0.0/../../../../include/c++
 /usr/local/include
 /usr/lib/llvm-3.8/bin/../lib/clang/3.8.0/include
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.
In file included from TimeHelper.cc:1:
./TimeHelper.hh:4:10: fatal error: 'cstdint' file not found
#include <cstdint>

O cabeçalho está presente em /usr/include/c++/5/ , mas esse caminho não está listado aqui. (libstdc ++ - 5-dev está instalado.)

Os sistemas não são idênticos, mas ambos são novos (atualizados hoje em dia).

Como descobrir qual é a origem do problema?

O toolchain preferido é conectado ou sugerido em um arquivo de configuração?

NB tenta especificar explicitamente --gcc-toolchain para um valor como /usr/lib/gcc/x86-64-linux-gnu/5 falha: parece que o clang não reconhece o diretório como um caminho de instalação do GCC. Ao contrário, para especificar o diretório de destino de uma compilação manual do GCC, é bem-sucedida (mas eu quero vê-lo funcionando por padrão).

    
por Netch 29.03.2017 / 12:53

2 respostas

0

Corrigido após a instalação do clang 4.0 (isso não resolveu o problema por si só), removendo restos do clang 3.8, gccgo e reinstalando o GCC 5 dos mesmos pacotes. Agora seleciona a versão correta.

Devido à falta de detalhes do algoritmo selecionado, não posso dizer exatamente o que causou esse resultado. De qualquer forma, funciona.

    
por Netch 29.09.2017 / 17:32
0

Na máquina que funciona:

$ find /usr/include/c++/ -name cstdint
/usr/include/c++/5/tr1/cstdint
/usr/include/c++/5/cstdint
$ dpkg -S /usr/include/c++/5/cstdint
libstdc++-5-dev:amd64: /usr/include/c++/5/cstdint

Então está em libstdc++-5-dev .

link

link

Vamos analisar libstdc++-6-dev então:

link

link

...
/usr/include/c++/6/cstdint
...
...
/usr/include/c++/6/tr1/cstdint
...
    
por Velkan 29.03.2017 / 13:34