我的操作系统是OS X 10.10.2,C的默认编译器是clang。 但是这个版本的clang不支持ubsan(未定义的消毒剂),它出现在3.4版本的clang中。我也想用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
现在我的操作系统中有两个版本的clang,一个是OSX附带的默认版本,位于/ usr / bin中,另一个是位于/ usr / local / bin中的clang-3.4。前一个可以找到C ++头文件,而后者则不能。
答案 0 :(得分:1)
您是否阅读了user documentation of clang
,尤其是关于command line options的部分? BTW,current(2015年3月)版clang
为3.6!
对于C ++代码,您应该使用clang++
命令,而不是clang
命令。
您可以将-I
和-L
选项传递给clang++
,但您可能错误地安装了clang
编译器。
您应该了解-v
或-H
的{{1}}和clang
选项;它们可能很有用,至少可以了解你的问题。
您可能有clang++
个问题;你应该PATH
-d你的Clang-3.4&amp;带有configure
的LLvm-3.4程序(如果这样做,重复整个编译器的构建和安装),你可能应该运行--program-suffix=-my-3.4
;也许你还需要一些/usr/local/bin/clang++-my-3.4
个--with-gcc-toolchain
选项。
我很确定你应该能够尝试编译或使用你需要Clang-3.4的神秘软件以及更现代的版本,如3.5或3.6;传闻你的MacOSX 10.10.2有一个基于Clang-3.5的系统编译器,它很可能能够编译和使用你的神秘软件。