Clang和LLVM是现代编译器技术和底层工具的集合,它们在编译、代码优化和程序调试等方面发挥着重要作用。这两个项目虽然紧密相关,但它们各自扮演着不同的角色。
Clang
Clang是一个编译器前端,它负责编译C、C++、Objective-C等语言。与传统编译器一样,Clang也包括词法和语法分析的功能,它将源代码转化为抽象语法树(AST)。作为LLVM的原生编译器,Clang以LLVM为后端,提供快速编译和有用的错误及警告信息。此外,Clang还提供了静态分析器和Clang-tidy,这些工具可以自动发现代码中的bug,并帮助开发者改进代码质量。
LLVM
LLVM(Low Level Virtual Machine)项目是一个模块化、可重用的编译器和工具链技术的集合。尽管名字中带有“虚拟机”,但它实际上并不直接对应于传统意义上的虚拟机。LLVM提供了一个现代化的、基于SSA(Static Single Assignment)的编译策略,支持任意编程语言的静态和动态编译。LLVM的核心是一个优化器,它独立于源代码和目标,用于优化LLVM中间表示(LLVM IR)。LLVM还包括一系列子项目,如LLDB调试器、libc++标准库实现、AddressSanitizer等动态测试工具,以及MLIR多级中间表示等。LLVM的优势在于它的多功能性、灵活性和可重用性,使其被广泛用于各种任务,从JIT编译嵌入式语言到编译大型机的Fortran代码。
1、LLVM所有版本下载路径
https://github.com/llvm/llvm-project/releases
2、这里安装版本13.0.1
# 下载
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.1/llvm-project-13.0.1.src.tar.xz
# 解压
tar vxf llvm-project-13.0.1.src.tar.xz
3、编译安装
cd llvm-project-13.0.1.src
mkdir build
cd build
开始编译
其中 -DLLVM_ENABLE_RTTI=ON 这个选项需要重点说明一下。由于我的目的是为了研究bpf技术,所以不可避免的会涉及到编译安装bpftrace这个工具。在编译bpftrace工程的时候如果没有打开 LLVM 的RTTI,会导致编译失败。而这个编译选项默认是关闭的,所以这里必须明确打开这个功能。
cmake -DCMAKE_BUILD_TYPE=Release -DLLVM_ENABLE_RTTI=ON -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi" -G "Unix Makefiles" ../llvm
这个python版本要求至少3.6以上,不然会报如下错误
参照安装:
https://blog.csdn.net/liuxiaoming1109/article/details/128814108?spm=1001.2014.3001.5501
make编译
[root@localhost build]# make
[ 0%] Building CXX object lib/Demangle/CMakeFiles/LLVMDemangle.dir/Demangle.cpp.o
[ 0%] Building CXX object lib/Demangle/CMakeFiles/LLVMDemangle.dir/ItaniumDemangle.cpp.o
[ 0%] Building CXX object lib/Demangle/CMakeFiles/LLVMDemangle.dir/MicrosoftDemangle.cpp.o
[ 1%] Building CXX object lib/Demangle/CMakeFiles/LLVMDemangle.dir/MicrosoftDemangleNodes.cpp.o
[ 1%] Building CXX object lib/Demangle/CMakeFiles/LLVMDemangle.dir/RustDemangle.cpp.o
[ 1%] Linking CXX static library ../libLLVMDemangle.a
[ 1%] Built target LLVMDemangle
我这个编译4个小时左右完成
make install
[root@localhost build]# make install
[ 1%] Built target LLVMDemangle
[ 4%] Built target LLVMSupport
[ 4%] Built target LLVMTableGen
[ 4%] Built target LLVMTableGenGlobalISel
.
-- Installing: /usr/local/lib/cmake/llvm/./LLVMProcessSources.cmake
-- Installing: /usr/local/lib/cmake/llvm/./TableGen.cmake
-- Installing: /usr/local/lib/cmake/llvm/./TensorFlowCompile.cmake
-- Installing: /usr/local/lib/cmake/llvm/./UseLibtool.cmake
-- Installing: /usr/local/lib/cmake/llvm/./VersionFromVCS.cmake
[root@localhost build]# clang -v
clang version 13.0.1
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin
Found candidate GCC installation: /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10
Selected GCC installation: /opt/rh/devtoolset-10/root/usr/lib/gcc/x86_64-redhat-linux/10
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Selected multilib: .;@m64
版权声明:本文内容来自CSDN:fastjson_,遵循CC 4.0 BY-SA版权协议上原文接及本声明。
本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行可。
原文链接:https://blog.csdn.net/bbj12345678/article/details/115263565
如有涉及到侵权,请联系,将立即予以删除处理。
在此特别鸣谢原作者的创作。
此篇文章的所有版权归原作者所有,与本公众号无关,商业转载建议请联系原作者,非商业转载请注明出处。