In clang ++ (Version 3.3) fehlen Header

9

Das scheint seltsam. Nehmen Sie ein einfaches C ++ - Programm

#include <cmath>
#include <iostream>

int main(void) {

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

}

was mit g++(4.8) gut geht, aber mit clang++(3.3) nicht kompiliert werden kann .

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$ 

Ich vermute, ich vermisse etwas offensichtliches.

Und ich habe das entsprechende -devPaket:

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$ 

Bearbeiten: Ich konnte das Bug Tracking System nicht überprüfen, dies ist tatsächlich bei Launchpad bekannt .

Edit 2: In Ubuntu 16.10 funktioniert es endlich:

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

mit clang++Version 3.8.1.

Dirk Eddelbuettel
quelle
Ich sehe, dass der Fehlerbericht NICHT BEHOBEN wurde, 13.10 nicht mehr unterstützt wird und 3.3 in 15.04 entfernt wurde. Also habe ich dafür gestimmt, es zu schließen.
user.dz
2
@Sneetsher: Verstehst du, dass ich dies vor fast zwei Jahren eingereicht habe, als diese Distributionsversion und dieses Paket aktuell waren ?
Dirk Eddelbuettel
Ja, das tue ich. Ich sehe nur, dass die Frage veraltet ist. Ich weiß nicht, dass jemand antworten wird. Wenn Sie möchten, können Sie die Problemumgehung aus dem hinzugefügten Fehlerbericht erwähnen -i /path-to-std-headers. Das wird später hier kommen. 7 Stimmen scheinen eine gewisse Anziehungskraft zu haben. :)
user.dz
1
Für das, was es wert ist, wird dies 2016 (standardmäßig) unter 16.04 noch nicht erstellt. Traurig.
Dirk Eddelbuettel
Ich werde es versuchen und Sie wissen lassen.
user.dz

Antworten:

1

Es funktioniert (endlich) in 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
quelle