导航:首页 > 源码编译 > 编译链接的概念是什么

编译链接的概念是什么

发布时间:2025-08-16 01:57:06

① c语言里面的编译和链接是怎么回事啊

C/C++语言的完整编译过程是

一、预编译

处理#define #if #include这类#开头的语句,这些称为预编译指令。这个过程中会把.h文件和.c/.cpp文件组合成最终交给compile过程的原文件。这个原文件是不包含任何#开头的语句的。所有#define定义的宏也会被替换。

二、编译
把上面那个原文件编译成.o或者VC里是.obj文件。这个文件保存了机器码化的函数、函数的描述、全局变量的描述、乃至段的描述等等。

三、连接
把可执行程序需要的所有的编译过程产生的.o或者.obj文件组合到一起。(这里也包括.lib文件,.lib文件件本质上就是打包的.obj文件集合)。另外连接过程还会组合一些其他数据,比如资源、可执行文件头等等。

② 操作系统的工作流程是什么

为了使计算机程序得以运行,计算机需要加载代码,同时也要加载数据,然后由处理器执行指令。整个过程可以总结为编译、链接、装载、执行。

1、编译

编译过程又可以被分为两个阶段:编译、汇编。

编译是指编译器读取字符流的源程序,对其进行词法与语法的分析,将高级语言指令转换为功能等效的汇编代码。

汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。

2、链接

链接的主要内容是将各个模块之间相互引用的部分处理好,使得各个模块之间能够正确地衔接。链接又分为静态链接和动态链接:

静态链接是指在编译阶段直接把静态库加入到可执行文件中去,这样可执行文件会比较大;

动态链接则是指链接阶段仅仅只加入一些描述信息,而程序执行时再从系统中把相应动态库加载到内存中去。

3、装载

程序在经过链接后,得到了可执行文件,下一步就需要将可执行程序加载到内存中。

由于现代操作系统均采用分页的方式来管理内存,所以操作系统只需要读取可执行文件的文件头,之后建立起可执行文件到虚拟内存的映射关系,而不需要真正的将程序载入内存。

4、运行

加载器将可执行目标文件中的代码和数据从磁盘复制到内存中,然后通过跳转到程序的第一条指令或入口点来运行程序。

在程序的运行过程中,CPU发现有些内存页在物理内存中并不存在并因此触发缺页异常,此时CPU将控制权限转交给操作系统的异常处理函数,操作系统负责将此内存页的数据从磁盘上读取到物理内存中。

数据读取完毕之后,操作系统让CPU jmp到触发了缺页异常的那条指令处继续执行,此时指令执行就不会再有缺页异常了。

(2)编译链接的概念是什么扩展阅读

为使计算机按预定要求工作,首先要编制程序,无论是最早的操作系统还是现代操作系统,程序的运行都是计算机工作的本质。

早期计算机是单任务执行,由程序员直接编写操作系统可以识别的机器语言,到现在可以实现多道程序并行,并且程序的开发由更利于程序员理解的高级语言编写,源程序在经过一系列翻译过程,变成计算机理解的机器语言,再执行。

整个程序执行的过程,需要CPU、内存、程序代码、设备等配合,才能实现程序要表达的功能。

阅读全文

与编译链接的概念是什么相关的资料

热点内容
利息5个点算法 浏览:919
python反编译措施 浏览:903
php网站免费模板 浏览:946
pgadm如何加服务器 浏览:639
python多文件批量改名 浏览:144
现在四川税务app怎么不能缴费 浏览:706
自己编译的软件 浏览:728
win访问共享文件夹快捷键 浏览:68
学习的原理pdf 浏览:119
编译增强模式 浏览:182
python如何去掉u 浏览:284
安卓相机怎么拍出苹果相机的色彩 浏览:830
冰箱压缩机直接打气 浏览:579
程序员憔悴的样子 浏览:417
文件夹广告弹窗 浏览:235
安卓机屏幕怎么改成苹果的 浏览:49
用腾讯云服务器需要什么app 浏览:23
微信流水账单发到邮箱解压不了 浏览:961
pubgmobile韩服安卓怎么登录 浏览:16
php小数转百分数 浏览:476