2013-08-29 123 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相同的問題,但沒有驅動程序通常提供的其他選項。

相關問題