clang++ 找不到 c++ 头文件和库

clang++ can not locate c++ header and library

我的 OS 是 OS X 10.10.2,C 的默认编译器是 clang。 但是这个版本的 clang 不支持 3.4 版 clang 中的 ubsan (undefined sanitizer)。我也想用KLEE做一些分析。 AFAIK KLEE 适用于 LLVM-<=3.4。我决定安装 我笔记本电脑中的 llvm-3.4 和 clang-3.4。

在我的系统中安装了clang-3.4后,遇到编译器找不到c++头文件的问题。我在/usr/local中安装了clang-3.4,在/usr/local/include/c++/4.8.4中可以找到c++头文件。如何将此目录添加到 clang-3.4 和 c++ 库的搜索路径中?

以下演示代码:

#include <iostream>
using namespace std;
int main(){
    cout<<"Hellow World\n";
    return 0;
}

当我使用命令clang++ test.cpp编译它时,出现错误

test1.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
     ^
1 error generated.

以下是我使用的clang版本

clang version 3.4 (tags/RELEASE_34/final)
Target: x86_64-apple-darwin14.1.0
Thread model: posix

我使用以下 shell 命令安装 llvm-3.4 和 clang-3.4:

wget http://llvm.org/releases/3.4/llvm-3.4.src.tar.gz \
     http://llvm.org/releases/3.4/clang-3.4.src.tar.gz \
     http://llvm.org/releases/3.4/clang-tools-extra-3.4.src.tar.gz \
     http://llvm.org/releases/3.4/compiler-rt-3.4.src.tar.gz
tar zxf llvm-3.4.src.tar.gz
tar zxf clang-3.4.src.tar.gz -C llvm-3.4/tools
mv llvm-3.4/tools/clang{-3.4,}
tar zxf clang-tools-extra-3.4.src.tar.gz -C llvm-3.4/tools/clang/tools
mv llvm-3.4/tools/clang/tools/{clang-tools-extra-3.4,extra}
tar zxf compiler-rt-3.4.src.tar.gz -C llvm-3.4/projects
mv llvm-3.4/projects/compiler-rt{-3.4,}

cd llvm-3.4
./configure --enable-cxx11  \
                      --enable-bindings=none --enable-shared \
                      --enable-debug-symbols --enable-optimized
make
make install

现在我的 OS 中有两个版本的 clang,一个是 OSX 中的默认版本,位于 /usr/bin 中,另一个是 clang-3.4,位于 /usr/local/箱。前者能找到C++头文件,后者不能。

你读过 user documentation of clang notably the section on command line options ? BTW, current (march 2015) version of clang is 3.6!

对于 C++ 代码,您应该使用 clang++ 命令,而不是 clang 命令。

您可能将 -I-L 选项传递给 clang++,但您可能错误地安装了 clang 编译器。

您应该知道 clangclang++-v-H 选项;它们可能会有用,至少可以更好地了解您的问题。


附录

顺便说一句,据报道可与 Clang 3.4 一起工作的程序极有可能与更现代的版本一起工作,例如 Clang 3.5 或 3.6

您可能遇到了 PATH 问题;你应该 configure -d 你的 Clang-3.4 & LLvm-3.4 程序 --program-suffix=-my-3.4 (如果你这样做,重复你的整个编译器构建和安装)你可能应该 运行 /usr/local/bin/clang++-my-3.4;也许您还需要一些 --with-gcc-toolchain 额外的 configure 选项。

我很确定您应该能够尝试编译或使用需要 Clang-3.4 的神秘软件以及更现代的版本,例如 3.5 或 3.6;据传你的 MacOSX 10.10.2 有一个基于 Clang-3.5 的系统编译器,它很可能能够编译和使用你的神秘软件。