编译和链接

简介: 编译和链接

前言


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

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



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


翻译环境


预处理

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

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

编译

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

汇编

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

链接

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

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

运行环境


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


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


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

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

相关文章
|
6月前
|
存储 自然语言处理 编译器
|
6月前
|
存储 自然语言处理 编译器
编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)
编译和链接(翻译环境:预编译+编译+汇编+链接​、运行环境)
|
1月前
|
存储 自然语言处理 编译器
|
6月前
|
存储 编译器 Linux
什么是编译与链接呢!
什么是编译与链接呢!
39 0
|
5月前
|
存储 自然语言处理 前端开发
编译与链接(想了解编译与链接,那么看这一篇就足够了!)
编译与链接(想了解编译与链接,那么看这一篇就足够了!)
|
6月前
|
自然语言处理 编译器 C语言
编译和链接
编译和链接
36 0
|
11月前
|
存储 自然语言处理 算法
程序的编译和链接
程序的编译和链接
47 0
|
6月前
|
自然语言处理 编译器 C语言
C语言程序编译和链接
在ANSI C的任何⼀种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令(⼆进制指令)。 第2种是执⾏环境,它⽤于实际执⾏代码。
31 0
|
存储 自然语言处理 程序员
编译和链接(上)
编译和链接(上)
43 0
|
编译器
编译和链接(下)
编译和链接(下)
55 0