编译和链接

简介: 编译和链接

前言


       当我们写完代码后,将代码运行起来需要翻译环境和运行环境,

翻译环境又分为编译和链接,编译又分为预处理,编译,汇编,



一个C语言的项目可能有多个.c文件构成,多个.c文件分别进行编译生成目标文件,最后通过链接器链接在一起,生成可执行程序


翻译环境


预处理

在预处理阶段,源文件和头文件会被处理为.i结尾的文件

预处理阶段主要处理源文件中的预编译指令,以#开头的指令就是预编译指令,在预处理阶段都会处理掉,展开头文件,将注释用空格替换,

编译

编译的过程就是将预处理后的文件进行进一步的词法分析,语法分析,语义分析及符号汇总,生成相应的汇编代码文件,也就是将C语言的代码转化成汇编代码,生成.s为后缀的文件

汇编

汇编就是把汇编代码转化成可执行的二进制文件,汇编器是将汇编代码转变成机器可执行的指令,每一个汇编语句几乎都对应一个机器指令,形成符号表,生成.o为后缀的文件

链接

链接过程主要包括:地址和空间分配,符号决议和重定位等步骤,链接是一个比较复杂的过程,大致来说就是把多个.o文件链接起来,也可以链接第三方库中的文件,生成可执行文件,

链接过程包括合并段表,符号表的合并和重定位

运行环境


1.程序必须载入到内存中,在有操作系统的环境中,这个一般由操作系统完成。在独立的环境中,程序的载入必须由手动安排,


2.程序的执行便开始,接着调用main函数,


3. 开始执⾏程序代码。这个时候程序将使⽤⼀个运⾏时堆栈(stack),存储函数的局部变量和返回地址。程序同时也可以使⽤静态(static)内存,存储于静态内存中的变量在程序的整个执⾏过程⼀直保留他们的值。

4. 终⽌程序。正常终⽌main函数;也有可能是意外终⽌。

相关文章
|
Linux
linux 交叉编译libpng,libjpeg库
linux 交叉编译libpng,libjpeg库
296 1
|
11月前
|
存储 算法 安全
做好数据治理,推动工业数字化迈向智能化阶段
鼓励开展重点领域和骨干企业工业数据治理专题培训,大力培养培训数据治理相关专业专职技术人员,不断壮大工业数据治理人才队伍。
|
SQL 开发框架 大数据
【数据挖掘】顺丰科技2022年秋招大数据挖掘与分析工程师笔试题
顺丰科技2022年秋招大数据挖掘与分析工程师笔试题解析,涵盖了多领域选择题和编程题,包括动态规划、数据库封锁协议、概率论、SQL、排序算法等知识点。
232 0
MATLAB实战 | APP设计
生成一个用于观察视点仰角和坐标轴着色方式对三维图形显示效果影响的App,界面如图1所示。界面右上部的列表框用于选择绘图数据、切换按钮组用于选择绘图方法,中间的旋钮用于设置视点方位角和仰角,右下部的分档旋钮用于设置坐标轴着色方式、跷板开关用于显示网格线。
687 7
MATLAB实战 | APP设计
|
SQL 关系型数据库 数据库
seata开发指南
seata开发指南
|
API
宜搭怎样在所属模块运用定点推送通知
宜搭怎样在所属模块运用定点推送通知
433 0
|
PHP C语言 Python
import方法引入模块详解
import方法引入模块详解
嵌入式实践教程--cartographer2020在 ubuntu18.04编译
嵌入式实践教程--cartographer2020在 ubuntu18.04编译
|
存储 机器学习/深度学习 人工智能
阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec
经历6年时间,在各团队的努力下,阿里巴巴集团大规模稀疏模型训练/预测引擎DeepRec正式对外开源,助力开发者提升稀疏模型训练性能和效果。
800 1
阿里巴巴开源大规模稀疏模型训练/预测引擎DeepRec
|
测试技术
软件测试面试题:webdriver可以用来做接口测试吗?
软件测试面试题:webdriver可以用来做接口测试吗?
155 0