目录
前言
一、LLVM简介
二、LLVM+Clang的安装
最近可能要学习编译器相关的知识,因此总结一下LLVM的安装方法,以防忘记如何安装。
接下来就是正式的安装过程了。。。
------------------------------------------------------------分割线---------------------------------------------------------------------------------------------------
LLVM是Low Level Virtual Machine 的缩写,它源自于伊利诺伊大学的一个开源研究项目,旨在提供一种现代化的编译机制,使得对于任何的语言既可以做到静态编译也可以动态编译,并且非常高效。后来LLVM孵化了很多的子项目,例如:Clang,LLDB,OpenMP等。
静态编译:编译器在编译可执行文件时,把需要用到的对应动态链接库(.so或.ilb)中的部分提取出来,链接到可执行文件中 去,使可执行文件在运行时不需要依赖于动态链接库。
动态编译:动态编译的可执行文件需要附带一个的动态链接库,在执行时,需要调用其对应动态链接库中的命令。所以其 优点一方面是缩小了执行文件本身的体积,另一方面是加快了编译速度,节省了系统资源。缺点一是哪怕是很 简单的程序,只用到了链接库中的一两条命令,也需要附带一个相对庞大的链接库;二是如果其他计算机上没 有安装对应的运行库,则用动态编译的可执行文件就不能运行。
LLVM由三部分组成:
第一部分是LLVM套件,它包含有LLVM所需的所有工具、库函数、和头文件,汇编器、反汇编器、bitcode(一种中间代码)分析器和优化器,以用来测试LLVM和Clang前端的基本回归测试。
第二部分是Clang前端,它将C/C++,Object C和Object C++代码编译成LLVM的中间代码(bitcode),一旦编译成LLVM bitcode,就可以使用LLVM的套件中的LLVM工具来进行操作了。
第三部分是测试集合,这是一个可选部分。它是一套能用来进一步测试LLVM功能和性能的程序。
LLVM官方是用svn进行版本控制的,因此我们需要安装svn来获取源码。
安装过程中会用到cmake工具来生成Makefile,需要先安装cmake。
sudo apt-get install subversion
sudo apt-get install cmake
#创建一个目录用来存放llvm源码
mkdir /tmp/llvm_source_build
#下载llvm代码
cd /tmp/llvm_source_build
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm
此时在/tmp/llvm_source_build目录下就会有一个llvm目录。
在/tmp/llvm_source_bulid/llvm/tools目录下下载clang。
#下载Clang源码
cd llvm/tools
svn co http://llvm.org/svn/llvm-project/cfe/trunk clang
cd llvm/tools/clang/tools
svn co http://llvm.org/svn/llvm-project/clang-tools-extra/trunk extra
cd llvm/projects
svn co http://llvm.org/svn/llvm-project/compiler-rt/trunk compiler-rt
还有一系列的可选项可以下载安装,这些并不主要,若需要可以查看参考文献2。
首先返回到/tmp/llvm_source_build目录下,新建一个build目录。
#新建build目录
cd /tmp/llvm_source_build
mkdir build
使用之前安装的cmake得到Makefile文件
cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DLLVM_TARGETS_TO_BUILD="X86" -DCMAKE_INSTALL_PREFIX=/opt/llvm ../llvm
上面的-CMAKE_INSTALL_PREDIX=/opt/llvm 表示要安装的目录。
得到Makefiile文件之后几可以进行编译和安装了
make -j 8
sudo make install
最后还需要配置一下环境变量。
#配置一下环境变量
vim /etc/profile
#在末尾添加
export PATH=$PATH:/opt/llvm/bin
参考文献:
1.https://www.xuebuyuan.com/3122442.html
2.http://llvm.org/docs/GettingStarted.html
3.https://www.jianshu.com/p/861c1a630059