我想使用Clang和LibTooling来创建一些C ++源代码分析和转换工具。我在this教程之后构建了Clang和LibTooling,并且我已经能够使用我构建的Clang二进制文件运行并创建一些分析工具并编译C ++程序。但是,如果我包含标准库中的标头(在源文件或我的工具中),则在编译或运行源文件/工具时会遇到问题。例如,如果我对以下C ++源文件运行clang-check:
#include <iostream>
int main() {
std::cout << "Hello";
return 0;
}
我得到&#34;致命错误:&#39; iostream&#39;文件未找到&#34;。 (注意:我可以编译C ++程序,例如使用用户定义类的程序,而不是使用标准库的C ++程序。)为了解决这个问题,我构建了libc ++(在this指南之后,构建它)我构建LLVM和Clang的llvm / project目录,但我仍然无法获得Clang和使用libc ++的工具。现在,如果我尝试使用:
编译测试文件export CPLUS_INCLUDE_PATH="~/clang-llvm/llvm/projects/libcxx/include"
export LD_LIBRARY_PATH="~/clang-llvm/llvm/projects/libcxx/lib"
~/clang-llvm/llvm/build/bin/clang++ ~/Documents/main.cpp
然后我得到了致命的错误:&#39; unistd.h&#39;文件未找到&#34;。所以我的问题是:我如何正确地指出Clang和我的工具使用libc ++?
我正在运行OS X Yosemite 10.10并使用Clang 3.6.0。
答案 0 :(得分:5)
Clang附带一些自定义包含。所以通常你都会铿锵有力 的/ usr /斌/铛++ 和包括在 /usr/lib/clang/3.6.1/include
但clang将它们视为相对路径: ../ LIB /铛/ 3.6.1 /包括
因此请确保可以从clang ++二进制文件或libtooling应用程序访问此相对路径。
答案 1 :(得分:3)
将您的工具包含在此:
your-tool yoursourcefile.c -- -nostdinc -I"path/to/your/standardlibrary"
CommonOptionsParser允许您从命令行读取传递给编译器的命令。 例如,您现在可以像这样调用您的工具:
@page {
@bottom-center {content: "Copyright AMCE Pty Ltd";}
}
双击之后的所有内容都将传递给编译器。这里描述了可能的标志: http://clang.llvm.org/docs/CommandGuide/clang.html
-nostdinc告诉预处理器不要查找标准包含路径。您可以在-I。
之后指定自己的路径希望它有所帮助:)问我是否不够具体。
答案 2 :(得分:-1)
构建/安装后是否移动/重命名了任何父目录?编译器应该已配置为知道在何处查找其标准库,而无需指定环境变量路径。
答案 3 :(得分:-2)
使用自制并使用命令
安装llvmbrew install llvm
你的问题应该解决。