clang ++(版本3.3)缺少标头


9

这似乎很奇怪。制作一个简单的C ++程序

#include <cmath>
#include <iostream>

int main(void) {

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

}

可以通过g++(4.8)正常运行,但不能通过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$ 

我怀疑我明显地遗漏了一些东西。

我确实有相关的-dev软件包:

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$ 

编辑:我没有检查Bug跟踪系统,实际上在Launchpad上是已知的

编辑2: 在Ubuntu 16.10中,它终于可以工作了:

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

使用clang++版本3.8.1。


我看到错误报告无法修复,不再支持13.10,并且在15.04中删除了3.3。因此,我投票决定将其关闭。
user.dz 2015年

2
@Sneetsher:您知道我是在两年前提交该版本和软件包时使用的吗?
Dirk Eddelbuettel 2015年

是的。我只是看到问题逐渐消失。我没有人要回答。但是,如果需要,您可以从bug报告中添加add提及解决方法-i /path-to-std-headers。那将在以后再说。7票似乎很吸引人。:)
user.dz 2015年

1
值得的是,在2016年16.04版下仍未构建(默认情况下)。伤心。
Dirk Eddelbuettel

我会尝试的,并让您知道。
user.dz

Answers:


1

它(最后)在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)$ 
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.