iOS编译过程之LLVM

本文详细介绍了iOS编译过程中LLVM的角色和工作原理,包括LLVM的概述、词法、语法和语义分析,以及从IR到可执行文件的转换过程。通过对源代码的不同阶段分析,阐述了预处理、编译、优化和链接等步骤,揭示了LLVM如何在多种编程语言和硬件架构间提供编译支持。
摘要由CSDN通过智能技术生成

一.  ios编译过程

1、LLVM概述

下面通过三种代码来研究:

print("hello"); 
//hello.py 

#include<stdio.h>
int main(int argc,char *argv[]){
	printf("hello world");
	return 0;
}
//hello.c

#import <stdio.h>
#define A 10
int main(int argc, const char * argv[]) {
    printf("%d",A + 20);   
    return 0;
}
//main.m

复制代码

C和C++(hello.c和main.m)需要通过clang 命令生成a.out文件才能执行.
那么为什么clang 命令可以编译我们的C和C++代码,成为二进制机器能读的懂的文件呢?

cd 
open /usr/bin 
查看 clang的位置
复制代码

LLVM概述
LLVM架构编译器(compiler)的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间(compile-time)、链接时间(link-time)、运行时间(run-time)以及空闲时间(idle-time),堆开发者保持开发,并兼容已有脚本。LLVM计划启动于2000年,最初由美国UIUC大学的Chris Lattner博士主持开展。2006年Chris Latther加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者。

目前LLVM已经被苹果IOS开发工具、Xilinx Vivado、Facebook、Google等各大公司采用。

1.编译器前端(Frontend):它解析源代码,进行词法分析,语法分析,语义分析,检查源码是否错误,然后构建抽象语法树(Abstract Syntax Tree,AST),LLVM的前端还会生成中间代码(intermediate representation,IR).

2.优化器(Optimizer):优化器负责进行各种优化。改善代码的运行时间,列如消除冗余计算等。

3.后端(Backend)/代码生成器(CodeGenerator):将代码映射到目标指令集。生成机器语言,并且进行机器相关的代码优化。

iOS的编译器框架

Objective C/C/C++使用编译器前端Clang,Swift是Swift,后端都是LLVM。

LLVM设计

当编译器决定支持多种源语言或多种硬件架构时,LLV

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值