clang ++ (version 3.3) manque d'en-têtes

9

Cela semble étrange. Prenez un simple programme C ++

#include <cmath>
#include <iostream>

int main(void) {

    std::cout << "Square root of 9 is " << sqrt(9) << std::endl;

}

qui passe bien avec g++(4.8) mais ne parvient pas à compiler avec clang++(3.3).

edd@don:/tmp$ g++ -o cmath cmath.cpp 
edd@don:/tmp$ ./cmath 
Square root of 9 is 3
edd@don:/tmp$ clang++ -o cmath cmath.cpp 
In file included from cmath.cpp:2:
/usr/lib/gcc/i686-linux-gnu/4.8/../../../../include/c++/4.8/cmath:41:10: \
       fatal error: 
      'bits/c++config.h' file not found
#include <bits/c++config.h>
         ^
1 error generated.
edd@don:/tmp$ 

Je soupçonne que je manque quelque chose d’évident.

Et j'ai le -devpackage correspondant :

edd@don:/tmp$ COLUMNS=72 dpkg -l | grep "clang\|llvm"
ii  clang-3.3      1:3.3-5ubunt i386         C, C++ and Objective-C compiler (
ii  libclang-commo 1:3.3-5ubunt i386         clang library - Common developmen
ii  libclang-commo 1:3.2repack- i386         clang library - Common developmen
ii  libclang1      1:3.2repack- i386         clang library
ii  libclang1-3.3  1:3.3-5ubunt i386         clang library
ii  libllvm3.1:i38 3.1-2ubuntu2 i386         Low-Level Virtual Machine (LLVM),
ii  libllvm3.2:i38 1:3.2repack- i386         Low-Level Virtual Machine (LLVM),
ii  libllvm3.3:i38 1:3.3-5ubunt i386         Low-Level Virtual Machine (LLVM),
ii  llvm-3.3       1:3.3-5ubunt i386         Low-Level Virtual Machine (LLVM)
ii  llvm-3.3-dev   1:3.3-5ubunt i386         Low-Level Virtual Machine (LLVM),
ii  llvm-3.3-runti 1:3.3-5ubunt i386         Low-Level Virtual Machine (LLVM),
edd@don:/tmp$ 

Edit: je n'avais pas vérifié le système de suivi des bogues, c'est en fait connu sur Launchpad .

Edit 2: Dans Ubuntu 16.10, cela fonctionne enfin:

edd@max:~/src/progs/C++(master)$ clang++ -o cmath cmath.cpp 
edd@max:~/src/progs/C++(master)$ ./cmath 
Square root of 9 is 3
edd@max:~/src/progs/C++(master)$ 

en utilisant la clang++version 3.8.1.

Dirk Eddelbuettel
la source
Je vois que le rapport de bogue WON'T FIXED, 13.10 n'est plus pris en charge et 3.3 est supprimé en 15.04. J'ai donc voté pour le fermer.
user.dz
2
@Sneetsher: Vous comprenez que j'ai déposé cela il y a près de deux ans lorsque cette version de distribution et ce package étaient à jour ?
Dirk Eddelbuettel
Ouais, j'en ai. Je vois juste que la question vieillit. Personne ne va répondre. Mais si vous le souhaitez, vous pouvez écrire une mention de la solution de contournement du rapport de bogue qui s'ajoute -i /path-to-std-headers. Cela viendra plus tard ici. 7 votes semblent avoir une certaine attraction. :)
user.dz
1
Pour ce que cela vaut, cela ne se construit toujours pas (par défaut) en 2016 sous 16.04. Triste.
Dirk Eddelbuettel
Je vais l'essayer et je vous le ferai savoir.
user.dz

Réponses:

1

Cela fonctionne (enfin) dans Ubuntu 16.10:

edd@max:~/src/progs/C++(master)$ cat cmath.cpp 

#include <cmath>
#include <iostream>

int main(void) {

    std::cout << "Square root of 9 is " << sqrt(9) << std::endl;

}
edd@max:~/src/progs/C++(master)$ clang++ -o cmath cmath.cpp 
edd@max:~/src/progs/C++(master)$ ./cmath 
Square root of 9 is 3
edd@max:~/src/progs/C++(master)$ 
Dirk Eddelbuettel
la source