web-dev-qa-db-fra.com

16.04 clang: mauvaise sélection de la chaîne d’outils gcc

J'ai deux systèmes 16.04 avec gcc (5.4.0 et 6.0.0) et Clang 3.8 (1: 3.8-33ubuntu3.1). Sur le premier système, clang réussit à compiler du code C++. avec l’ajout de -v, les éléments de sortie essentiels sont les suivants:

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.

Mais, sur un autre système, cela échoue; spectacles prolixe

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

Mais GCC6 dans cette version ne contient pas d’en-têtes, la compilation échoue:

#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>

L'en-tête est présent dans /usr/include/c++/5/ mais ce chemin n'est pas répertorié ici. (libstdc ++ - 5-dev est installé.)

Les systèmes ne sont pas identiques mais les deux marques sont fraîches (mises à jour aujourd'hui).

Comment savoir quelle est la source du problème?

La chaîne d'outils préférée est-elle câblée ou suggérée dans un fichier de configuration?

NB a tenté de spécifier explicitement --gcc-toolchain avec une valeur telle que /usr/lib/gcc/x86-64-linux-gnu/5 échoue: il semble que clang ne reconnaisse pas le répertoire comme chemin d’installation de GCC. Contrairement à cela, pour spécifier le répertoire cible d’une construction manuelle, GCC réussit (mais je veux le voir fonctionner par défaut).

2
Netch

Corrigé après l’installation de clang 4.0 (cela ne réglait pas le problème par lui-même), la suppression des restes de clang 3.8, gccgo et la réinstallation de GCC 5 à partir des mêmes packages. Maintenant, il sélectionne la version appropriée.

En raison du manque de détails sur les algorithmes de sélection, je ne peux pas dire exactement ce qui les a causés. En tout cas, ça marche.

0
Netch

Sur la machine qui fonctionne:

$ 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

Donc, c'est dans libstdc++-5-dev.

http://packages.ubuntu.com/xenial/libstdc++-5-dev

http://packages.ubuntu.com/xenial/AMD64/libstdc++-5-dev/filelist

Regardons dans libstdc++-6-dev alors:

http://packages.ubuntu.com/zesty/libstdc++-6-dev

http://packages.ubuntu.com/zesty/arm64/libstdc++-6-dev/filelist

...
/usr/include/c++/6/cstdint
...
...
/usr/include/c++/6/tr1/cstdint
...
0
Velkan