美文网首页
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