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).
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.
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
...