Wangyt

导航

C语言开发过程中目标代码文件、可执行文件和库

一、C程序开发的一般流程

  1:定义程序的目标,明确程序的功能,明确程序中需要哪些信息、计算和控制,明确程序中应该报告什么信息,不会设计到具体的计算机语言,对于问题的描述一般用的是术语;

  2:设计程序,考虑如何通过程序实现程序的目标,具体一点说,需要考虑的可以有用户界面的设计、程序的组织、目标用户的确定以及程序开发时间计划,除了这些,好需要确定是在程序中(也有可能是在辅助文件中)数据的表示形式以及数据的处理方法。这个阶段,不会用到具体的代码。问题的描述用的是一般术语,但是不排除某些决策会和具体的语言特性相关。;

  3:编写代码,具体实现设计好的程序;

  4:编译,编译的细节取决于编译环境;

  5:运行程序;

  6:测试与调试程序,找Bug,改Bug;

  7:维护与修改代码;

  8:说明,对程序给出相应的注释。

二、编译过程中涉及到的目标文件、可执行文件和库

   如下图所示,典型的C实现通过编译和链接两个步骤完成。编译器负责把源代码转换成中间代码,链接器把中间代码和其他代码合并,生成可执行文件。

  中间文件有多种形式,最普遍的一种是将源代码转换成机器语言代码,并把结果放在目标代码文件中(简称目标文件)。虽然目标文件中包含机器语言代码,但并不能直接运行。因为其中存储的是编译器翻译的源代码,还不是一个完整的程序。

  目标代码文件缺失启动代码(startup code)。启动代码充当着程序与操作系统之间的接口。

  目标代码还缺少库函数。几乎所有的C程序都需要使用C标准库中的函数。举例:源码中使用printf()函数,编译过程中的目标文件并不包含该函数的代码,仅仅是包含了使用该函数的指令。真正实现printf()功能的代码存放在‘库’文件中,库文件中包含很多功能函数的目标代码。

  链接器的作用:将转换成目标代码、系统的标准启动代码、库代码这3部分进行合并,生成一个可执行文件。链接过程中,从库文件中提取的仅仅是程序中需要用到的。

  简而言之,不管是目标文件还是可执行文件,其中存储的都是机器语言代码。不同的是,目标文件中包含的仅仅是将自己写的源代码原原本本转换出来的结果,目标文件中存储的,除了源代码的转换结果,还包括了相关的启动文件和库函数的机器代码。

 

posted on 2019-05-24 11:41  Wangyt  阅读(1074)  评论(0编辑  收藏  举报