1.7.1 目标代码文件、可执行文件和库

简介: C编程将源代码文件转换为可执行文件,此过程分为编译与链接两步。首先,编译器将源代码转化为中间代码,再由链接器将其余代码融合,最终生成可执行文件。此方法有助于程序模块化,允许独立编译各模块并在后期使用链接器整合,避免因单一模块变动导致整体重编。同时,链接器还会将用户程序与预编译库代码结合,生成完整程序。目标代码文件在链接前缺少启动代码及库函数,这些由链接器在最后阶段补充完整。

C编程的基本策略是,用程序把源代码文件转换成可执行文件(其中包含可直接运行的机器语言代码)。典型的C实现通过编译和链接两个步骤来完成这一过程。编译器把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。C使用这种分而治之的方法方便对程序进行模块化,可以独立编译单独的模块,稍后再用链接器合并已编译的模块。通过这种方式,如果只更改某个模块,不必因此重新编译其他模块。另外,链接器还将你编写的程序和预编译的库代码合并。
中间文件有多种形式。我们在这里描述的是最普遍的一种的形式,即把源代码转换为机器语言代码,并把结果放在目标底阿妈文件(或简称目标文件)中(这里假设源代码只有一个文件)。虽然目标文件中包含机器语言代码,但是并不能直接运行该文件。因为目标文件中存储的是编译器翻译的源代码,这坏不是一个完整的程序。
目标代码文件缺失启动代码。启动代码充当着程序和操作系统之间的接口。例如,可以在MS Windows或Linux系统下运行IBM PC兼容机。这两种情况所使用的硬件相同,所以目标代码相同。但是Windows和Linux所需的启动代码不同,因为这些系统处理程序的方式不同。
目标代码还缺少库函数。几乎所有的C程序都要使用C标准库中的函数。例如,concrete.c中就使用了printf()函数。目标代码文件并不包含该函数的代码,它只包含了使用printf()函数的指令。printf()函数真正的代码存储在另一个被称为库的文件中。库文件中许多函数的目标代码。
链接器的作用是,把你编写的目标代码、系统的标准启动代码和库代码这3部分合并成一个文件,即可执行文件。对于库代码,链接器只会把程序中要用到的库函数代码提取出来。

目录
相关文章
|
7月前
|
算法 Linux 开发者
CMake深入解析:打造高效动态链接库路径设置
CMake深入解析:打造高效动态链接库路径设置
554 0
源文件与模块生成时的文件不同,是否希望调试器使用它?如何解决
源文件与模块生成时的文件不同,是否希望调试器使用它?如何解决
|
3月前
|
Python
用python转移小文件到指定目录并压缩,脚本封装
这篇文章介绍了如何使用Python脚本将大量小文件转移到指定目录,并在达到大约250MB时进行压缩。
40 2
|
7月前
|
算法 IDE Linux
【CMake 小知识】CMake中的库目标命名和查找策略解析
【CMake 小知识】CMake中的库目标命名和查找策略解析
283 1
|
7月前
|
存储 缓存 Unix
Cmake 链接外部库:如何在项目中使用外部库和头文件
Cmake 链接外部库:如何在项目中使用外部库和头文件
565 0
|
7月前
|
定位技术 Python
Python依据某一文件夹中大量文件的名称复制另一文件夹中的同名文件
Python依据某一文件夹中大量文件的名称复制另一文件夹中的同名文件
|
XML 存储 数据格式
基于大量文件的名称特征自动新建多个文件夹并自动复制对应文件:Python
本文介绍基于Python,对一个文件夹下大量栅格影像,基于其各自文件名,分别创建指定名称的新文件夹,并将对应影像文件复制到不同的新文件夹下的方法。
150 3
基于大量文件的名称特征自动新建多个文件夹并自动复制对应文件:Python
|
7月前
|
C语言
日常知识点之编译运行时识别头文件目录或者链接库目录设置
日常知识点之编译运行时识别头文件目录或者链接库目录设置
79 0
|
C++
【c++】c++ 编译链接成的可执行程序 执行时却表示无法找到某个或几个库
问题描述:c++ 程序已经完成了编译链接,但是在执行时,提醒说某个 库 地址找不到,无法启动进程服务。 使用 ldd 命令 查看执行程序 可以看到 存在 某个库 显示 not find
108 0
|
XML 运维 数据可视化
使用cmake 构建构建新项目的时候,编译提示库找不到怎么办?
以上是一些常见的解决方案,但具体解决方案可能因具体情况而异。如果以上解决方案无法解决问题,请提供更多详细信息,留在评论区,以便博主更好地帮助您解决问题。
268 0