java调用clang编译的so_了解-clang编译过程

clang编译过程

clang是一个 C、C++和 Objective-C的编译器, 包含了预处理、语法解析、代码生成、优化、汇编和链接阶段, 尽管clang是高度集成的, 但是理解编译的各个阶段, 仍然很有必要.

过程:

预处理 -> 语法解析 -> 代码生成&优化 -> 汇编 -> 链接

.c -> AST -> .s -> .o -> .out

编译过程

驱动

clang可执行文件实际上是一个小的驱动程序, 控制其他工具(如编译器、汇编器和链接器)的总体执行. 通常你不需要直接和驱动程序交互, 就可以使用clang来运行其他工具.

预处理

这个阶段会对输入的源文件进行标记化处理、宏扩展、#include扩展和其他预处理器指令的处理. 对C输出.i, 对C++输出 .ii, 对 OC 输出 .mi, 对Objective-C++ 输出 .mii, 分别对应如下:

输入: .c、 .cpp、 .m、 .mm

输出: .i、 .ii、 .mi、 .mii

语法分析和语义分析

这个阶段会解析输入文件, 将预处理标记转换为解析树. 一旦以解析树的形式出现, 它也会用语义分析来计算表达式的类型, 确认代码格式是否正确.

该阶段负责生成大多数的编译警告和错误, 输出为 AST(抽象语法树, Abstract Syntax Tree)

输出: AST

代码生成和优化

这个阶段会将AST转换为底层的中间代码(称为 LLVM IR), 再最终转换为机器码.该阶段负责优化生成的代码, 并处理特定目标的代码生成. 输出通常称为 .s 文件或者 汇编文件.

输出: .s、 汇编文件

汇编

这个阶段将编译器的输出转换为目标文件, 输出为 .o 文件 或者 obje

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值