Llvm 使用libclang作为编译器

Llvm 使用libclang作为编译器,llvm,clang,Llvm,Clang,我正在开发一个根据规范生成C代码的工具。因此,用户需要先编译生成的代码,然后再使用其他工具使用编译后的代码。我想自动化这个繁琐的过程。我不想调用进程,而是想知道是否可以使用libclang直接嵌入编译器?是的,对于某些版本的clang/llvm是可能的。您可以从=开始,这是二进制本身的clang源代码。它确实调用了一个libclang库,您可以将此代码集成到您的应用程序中。(实际上,它使用内部CLAN和LLVM库的不稳定C++接口,而不是LBCLANG的稳定C API) 如果您在文件中保存所有C

我正在开发一个根据规范生成C代码的工具。因此,用户需要先编译生成的代码,然后再使用其他工具使用编译后的代码。我想自动化这个繁琐的过程。我不想调用进程,而是想知道是否可以使用libclang直接嵌入编译器?

是的,对于某些版本的clang/llvm是可能的。您可以从=开始,这是二进制本身的
clang
源代码。它确实调用了一个libclang库,您可以将此代码集成到您的应用程序中。(实际上,它使用内部CLAN和LLVM库的不稳定C++接口,而不是LBCLANG的稳定C API)


如果您在文件中保存所有C源代码,这就是您所需要的。但是,如果您想通过内存直接传递源代码,您应该编写自定义的
SourceManager
,并使用
setSourceManager()
方法设置
compiler职业Clang

我不确定Clang是否完全从cc1_main.cpp文件(链接到)启动,因此,还要检查同一目录中的driver.cpp文件。@osgx需要专门调用哪些函数?我正在尝试做这件事,但由于遗漏了这件事和那件事,几乎没有一条线能工作。指定.c文件并吐出机器代码所需的最小值是多少?@SevenBits,使用此文件的当前版本。你也可以问新的问题,这实际上不是代码> LBCLUN ,<代码> LBCLUN< /COD>是C接口,这是C++界面,它不稳定。KrAlk,谢谢你的评论。您能为这个问题添加自己的答案吗(如何使用libclang将clang+llvm作为c/c++编译器嵌入)?libclang2010年创建()作为解析/索引/外部参照/突出显示/完成的接口。它扩展到编译器嵌入库了吗?看看这个博客,你也可以使用
cc1\u main
并传递参数来实现这一点。两种方法都不使用libclangtho