clang ++ (wersja 3.3) nie ma nagłówków

9

To wydaje się dziwne. Weź prosty program w C ++

#include <cmath>
#include <iostream>

int main(void) {

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

}

który pasuje dobrze z g++(4.8), ale nie kompiluje się z 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$ 

Podejrzewam, że brakuje mi czegoś rażąco oczywistego.

I mam odpowiedni -devpakiet:

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$ 

Edycja: Nie udało mi się sprawdzić systemu śledzenia błędów, w rzeczywistości jest on znany na Launchpadzie .

Edycja 2: W Ubuntu 16.10 wreszcie działa:

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

przy użyciu clang++wersji 3.8.1.

Dirk Eddelbuettel
źródło
Widzę raport o błędzie NIE NAPRAWIONO, wersja 13.10 nie jest już obsługiwana, a wersja 3.3 została usunięta w 15.04. Głosowałem więc za jego zamknięciem.
user.dz.
2
@Sneetsher: Rozumiesz, że złożyłem to prawie dwa lata temu, kiedy ta wersja dystrybucyjna i pakiet były aktualne ?
Dirk Eddelbuettel
Tak. Widzę tylko, że pytanie się starzeje. Nikt mi nie odpowie. Ale jeśli chcesz, możesz napisać jedną wzmiankę o obejściu z dodanego raportu o błędzie -i /path-to-std-headers. To przyjdzie później tutaj. Wydaje się, że 7 głosów ma jakąś atrakcję. :)
user.dz
1
To, co jest tego warte, nadal nie buduje (domyślnie) w 2016 roku pod 16.04. Smutny.
Dirk Eddelbuettel
Spróbuję i dam ci znać.
user.dz

Odpowiedzi:

1

To (w końcu) działa w 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
źródło