2

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

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

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);

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

我的错误

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

4

0 回答 0