将clang编译器嵌入到OS X Cocoa App中

时间:2014-11-21 20:47:01

标签: c++ objective-c macos cocoa libclang

作为我的应用程序开发生成C源代码的一部分,我需要能够将编译器嵌入到我的应用程序中,以便它可以生成可执行对象代码。由于这是一个用于Mac App Store的沙盒应用程序,因此我无法使用NSTask直接调用clang,因为独立工具显然无法在沙箱下运行。可惜。

我遇到了libclang,这是编译器的库版本,似乎可以解决这个问题。使用来自here的信息,我能够获取预配置的libclang二进制文件以集成到我的应用程序中。麻烦的是,我似乎无法弄清楚libclang API调用是什么过程并生成可执行文件。我找到了这个示例代码:

string source = "app.c";
string target= "app";

llvm::sys::Path clangPath = llvm::sys::Program::FindProgramByName("clang");

// arguments
vector<const char *> args;
args.push_back(clangPath.c_str());
args.push_back(source.c_str());
args.push_back("-l");
args.push_back("curl");

clang::TextDiagnosticPrinter *DiagClient = new clang::TextDiagnosticPrinter(llvm::errs(), clang::DiagnosticOptions());
clang::IntrusiveRefCntPtr<clang::DiagnosticIDs> DiagID(new clang::DiagnosticIDs());
clang::DiagnosticsEngine Diags(DiagID, DiagClient);

clang::driver::Driver TheDriver(args[0], llvm::sys::getDefaultTargetTriple(), target, true, Diags);

clang::OwningPtr<clang::driver::Compilation> c(TheDriver.BuildCompilation(args));

int res = 0;
const clang::driver::Command *FailingCommand = 0;
if (c) res = TheDriver.ExecuteCompilation(*c, FailingCommand);
if (res < 0) TheDriver.generateCompilationDiagnostics(*c, FailingCommand);

不幸的是,它不会编译。我收到这些错误:

My errors

也许我没有包含正确的头文件,我不知道。但鉴于缺少libclang的文档,我非常感谢一些帮助。

0 个答案:

没有答案