安装
- 在官网下载页下载LLVM3.2版本的llvm3.2和clang3.2的source code压缩包
- 解压后安装:./configure,make,sudo make install
什么是LLVM
llvm是low level virtual machine的简称,其实是一个编译器框架。llvm随着这个项目的不断的发展,已经无法完全的代表这个项目了,只是这种叫法一直延续下来。
llvm是一个开源的项目。它最早的时候是Illinois的一个研究项目,主要负责人是Chris Lattner,他现在就职于Apple. Apple 目前也是llvm项目的主要赞助者之一。
llvm的主要作用是它可以作为多种语言的后端,它可以提供可编程语言无关的优化和针对很多种CPU的代码生成功能。此外llvm目前已经不仅仅是个编程框架,它目前还包含了很多的子项目,比如最具盛名的clang.
llvm的优点是开源,有一个表达形式很好的IR语言,模块化作的特别好。
llvm这个框架目前已经有基于这个框架的大量的工具可以使用。
LLVM Command Guide
llvm-as 将人类可读的 .ll 文件汇编成字节代码
llvm-dis 将字节代码文件反编成人类可读的 .ll 文件
opt 在一个字节代码文件上运行一系列的 LLVM 到 LLVM 的优化
llc 为一个字节代码文件生成本机器代码
lli 直接运行使用 JIT 编译器或者解释器编译成字节代码的程序(运行.bc文件或.ll文件)
llvm-link 将几个字节代码文件连接成一个
llvm-ar 打包字节代码文件
llvm-lib LLVM lib.exe compatible library tool
llvm-nm 在 打印出LLVM中间格式或者object文件的符号表(2014年5月14日更新)
llvm-config 打印出配置时 LLVM 编译选项、库、等等
llvm-diff 比较两个模块的结构
llvm-ranlib 为 llvm-ar 打包的文件创建索引
llvm-prof 将 ‘llvmprof.out’ raw 数据格式化成人类可读的报告
llvm-ld 带有可装载的运行时优化支持的通用目标连接器
llvmc 一个通用的可定制的编译器驱动
bugpoint 自动案例测试减速器
llvm-extract 从 LLVM 字节代码文件中解压出一个函数
llvm-bcanalyzer 字节代码分析器 (分析二进制编码本身,而不是它代表的程序)
FileCheck 灵活的文件验证器,广泛的被测试工具利用
tblgen 目标描述阅读器和生成器
lit LLVM 集成测试器,用于运行测试
AddressSanitizer 一个快速内存错误探测器
LLVM工具链使用
Linuc GCC常用命令1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16gcc test.c -o test #直接从源代码生成可执行文件
实际流程:.c-->.i-->.s-->.o-->.elf
gcc -E test.c -o test.i 或 gcc -E test.c(不生成test.i,只在终端显示) #预处理Preprocessing(加入包含的库,生成中间文件.i)
gcc -S test.i -o test.s 或 gcc -S test.i(默认生成test.s) #编译为汇编Compilation(编译器生成汇编代码.s)
gcc -c test.s -o test.o 或 gcc -c test.s(默认生成test.o) #汇编Assembly(汇编器将汇编代码翻译成机器语言指令,把这些指令打包成一种叫做可重定位目标程序格式,并保存在.o文件中)
gcc test.o -o test 或 gcc test.o(默认生成test.o) #链接Linking(将目标文件链接成可执行文件)
gcc test.i/test.s/test.o -o test #均生成可执行文件test.elf
gcc -O1 test.c -o test
#使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
1 | vim hello.c |