LLVM 介绍
LLVM是构架编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),对开发者保持开放,并兼容已有脚本。
编译器结构
- 前端。
- 优化器
- 后端
前端
解析源代码。词法分析,语法分析,语义分析,代码是否正确,构造抽象语法树。
LLVM 前端生成中间代码。
优化器
改善代码,减少优化时间等。
后端
生成机器语言。
LLVM特点
生成中间代码 (IR),使得前端后端分离。从而实现,多语言编译开发(前端多语言(c++,java等),后段多架构(arm,x86等))。
Mac LLVM 环境
编译源文件
镜像下载 llvm 文件
1 | # llvm 源文件 |
编译
在 这个目录下 创建一个 新的目录 build
在 build 目录中
1 | # 编译 llvm 到build 目录下 |
然后在这个 build 目录里面创建一个 install 目录
然后我们开始配置环境变量
1 | mkdir i |
LLVM_HOME 写入 bash_profile
1 | export LLVM_HOME=/Users/0xc3m4l/LLVM/build/i |
这样就配置好环境了
当利用 llvm/bin 里面的 clang时 我们要附加 lib 这里可以直接饮用 Xcode 自带的 lib
不然不能编译 .c 文件因为没有文件头
1 | ./clang -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk/usr/include test.c -o test |
我们就能进行编译了。
不加 libc 地址
利用build里面的clang
环境配置好了
因为我们要用到 llvm 里面的clang 工具
所以我们自己定义。
如果想用 llvm 中的指令
我们需要PATH中添我们的 llvm的地址
然后 source ~/.bash_profile
我们就能 用到 clang 也能 用 llvm的指令了
如果只是用 llvm_clang 不能编译因为 找不到头文件 我们可以加参数
1 | -isysroot `xcrun --show-sdk-path` |
来编译
使用指令
1 | 编译可执行文件 |
※ 直接安装
mac 用户建议直接安装。
1 | brew install llvm |