2013-08-29 156 views
6

我有以下文件foo.cpp铛-cc1和系统包括

#include <vector> 

struct MyClass 
{ 
    std::vector<int> v; 
}; 

它可以与铛(我使用铛3.3在Ubuntu 13.04 32位)被成功编译:

clang++ -c foo.cpp 

现在我想打印AST:

clang++ -cc1 -ast-print foo.cpp 

而且我有下面的错误

foo.cpp:1:10: fatal error: 'vector' file not found 
#include <vector> 
     ^
struct MyClass { 
}; 
1 error generated. 

它看起来像clang++ -cc1不知道系统包括文件等 我不知道如何设置包括:clang++ -cc1

回答

7

您需要树立正确的include路径。我在我的系统上添加了

-I/usr/include/i386-linux-gnu/c++/4.8 -I/usr/include/c++/4.8 

给编译器标志。第一个问题是,这样它可以找到 比特/ C++的config.h 当然的4.8是由于我使用与G ++兼容的编译器 - 4.8

我还添加了

-std=c++11 -stdlib=libstdc++ 

作为编译器选项。 希望这有助于

+0

也尝试将“-stdlib = libstdC++”更改为“-lstdC++”,即“clang -x C++ -std = C++ 11 -lstdC++ -Wall input.cpp -o output” – robor78

0

@ john是correct。对于后人的FAQ的相关部分(与调整,以匹配问题名称):

clang -cc1是前端,clang是司机。驱动程序使用适合您的系统的选项调用前端。要查看这些选项,运行:

$ clang++ -### -c foo.cpp 

一些铿锵的命令行选项是唯一的驱动程序选项,有的只是前端的选项。仅前端选项旨在仅供叮铛声开发人员使用。用户不应该直接运行clang -cc1,因为-cc1选项不能保证稳定。

如果你想使用一个唯一的前端选项(“一-cc1选项”),例如-ast-dump,那么你就需要采取由驾驶员产生的clang -cc1线,并添加你需要的选项。或者,您可以运行clang -Xclang <option> ...以强制驱动程序[通过<option>clang -cc1

我没有后者(-Xclang),用于发射预编译头:

/usr/bin/clang++ -x c++-header foo.hpp -Xclang -emit-pch -o foo.hpp.pch <other options> 
             ^^^^^^^ 

没有-Xclangclang++忽略-emit-pch。当我尝试-cc1时,我遇到了与clang++接受-emit-pch相同的问题,但没有驱动程序通常提供的其他选项。

相关问题