在C ++项目中将clang用作库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在C ++项目中将clang用作库相关的知识,希望对你有一定的参考价值。

我正在尝试使用clang作为库,但是我不确定如何链接Makefile中的文件。

https://clang.llvm.org/docs/RAVFrontendAction.html中试用ASTVisitor代码

这里是我的Makefile供参考:

CC=g++
Includes= /usr/lib/llvm-6.0/include/
Libs= /usr/lib/llvm-6.0/lib/
CLANGLIBS=-lclangTooling -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization -lclangCodeGen -lclangParse -lclangSema -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangAnalysis -lclangARCMigrate -lclangRewrite -lclangRewriteFrontend -lclangEdit -lclangAST -lclangLex -lclangBasic -lclang

run:
    LD_PRELOAD=../../llvm-project/build/lib/libclang.so ./clang_parser.out

all: clang_parser.cpp
    $(CC) -I$(Includes) -L$(Libs) clang_parser.cpp -o a.out $(CLANGLIBS)
clean:
    rm clang_parser.out

我已将clang安装为库,即已完成sudo apt-get install libclang-dev

我收到以下错误:

clang_parser.cpp:13:10: fatal error: clang/Frontend/FrontendActions.h: No such file or directory
#include <clang/Frontend/FrontendActions.h>
      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Makefile:10: recipe for target 'all' failed
make: *** [all] Error 1

也欢迎在C / C ++项目中使用apt安装的软件包的任何最佳实践。

答案

已安装许多软件包以确保:

sudo apt-get install libclang-dev llvm clang clang-tools

这是供参考的编译命令(它包括可能使用的所有库):

clang++ `llvm-config --cxxflags --ldflags` clang_parser.cpp $(CLANGLIBS2) `llvm-config --libs --system-libs` -g -o tool

其中

CLANGLIBS2=-lclangTooling -lclangFrontendTool -lclangFrontend -lclangDriver -lclangSerialization -lclangCodeGen -lclangParse -lclangSema -lclangStaticAnalyzerFrontend -lclangStaticAnalyzerCheckers -lclangStaticAnalyzerCore -lclangAnalysis -lclangARCMigrate -lclangRewrite -lclangRewriteFrontend -lclangEdit -lclangAST -lclangASTMatchers -lclangLex -lclangBasic -lclang

通过执行以下操作,将/usr/lib/llvm-6.0/lib中的所有.so,.a文件设置为LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/usr/lib/llvm-6.0/lib
ldconfig

以上是关于在C ++项目中将clang用作库的主要内容,如果未能解决你的问题,请参考以下文章

在Visual C ++中将静态库链接到新项目

获取 clang++:错误:编译包含文件系统库的代码时

在 C# 应用程序中构建静态库

如何在 Visual Studio 中将用 C 编写的源代码从另一个项目包含到我自己的 C++ 项目中

如何制作可在不同代码库中重用的C“库”?

在 Visual Studio c++ 项目中将 Eigen 外部库放在哪里?