美文网首页
LLVM和iOS文件编译过程

LLVM和iOS文件编译过程

作者: 今晚打老虎_9527 | 来源:发表于2020-07-06 18:07 被阅读0次

编译器背景

GCC

image

LLVM

LLVM比gcc的优势是模块化,中间端都是统一的,添加新的语言的话,只需要添加一个新的前端就行

image

Clang

clang是LLVM的子项目,是LLVM架构里C族编译器的前端


image

对比GCC优点:

  • 编译速度快
  • 占用内存小,clang生成的语法树(AST)是GCC的五分之一左右
  • 诊断信息丰富准确
  • 模块化,容易拓展

OC文件的编译过程

#import "Person.h"
#import <UIKit/UIKit.h>

@implementation Person

- (void)test {
    UIApplication *app = [UIApplication sharedApplication];
    UIView *statusBar = [app valueForKey :@"statusBar"];
    NSLog(@"%@", statusBar);
}

@end

终端输入clang -ccc-print-phases Person.m,可以查看编译过程

image
  1. 找到这个文件

  2. 预处理,替换import,include,宏定义

    终端输入clang -E Person.m,可以查看预处理结果

  3. 词法分析,生成token,后面的loc代表行号和第几个字符

    终端输入clang -fmodules -E -Xclang -dump-tokens Person.m

image
  1. 语法分析,token拼接,生成语法树(AST)

    终端输入clang -fmodules -fsyntax-only -Xclang -ast-dump Person.m

image
  1. 生成中间代码,IR
    LLVM IR有3种表现形式

    • text,便于阅读的文本格式,类似汇编,拓展名为.ll,clang -S -emit-llvm main.m
    • memory,内存格式
    • bitcode,二进制格式,拓展名为.bt,clang -c -emit-llvm main.m
  2. 汇编

  3. 链接

  4. 转成目标可执行文件

相关文章

网友评论

      本文标题:LLVM和iOS文件编译过程

      本文链接:https://www.haomeiwen.com/subject/hxegqktx.html