C基础——目标代码文件、可执行文件和库

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

  C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码。C分两步完成这一工作:编译和链接。编译器将源代码转换为中间代码,链接器将此中间代码与其他代码相结合来生成可执行文件。C使用被划分为两部分的这一方法使程序便于模块化。我们可以分别编译各个模块,然后使用链接器将编译过的模块结合起来。这样,如果需要改变一个模块,则不必重新编译所有其他模块。同时,链接器将自己的程序与预编译的库代码结合起来。

  中间文件的形式有多种选择。最一般的选这,同时也是大部分C程序员的选择,是将源代码转换为机器语言代码,将结果放置在一个目标代码文件(简称为目标文件)中。虽然目标文件包含机器语言代码,但该文件还不能运行。目标文件包含源代码的转换结果,但该转换结果并不是一个完整的程序。

  目标代码文件中的所缺少的第一个元素的一种叫做启动代码(start-up code)的东东,此代码相当于自己程序和操作系统之间的接口。

目标代码中缺少的第二个元素是库函数的代码。几乎所有C程序都利用标准C库中包含的库函数。比如printf()函数,目标代码文件不包含这一函数的代码,它只包含声明使用printf()函数的指令。实际代码存储在库中。库文件中包含许多函数的目标代码。

  链接器的作用是将这3个元素(目标代码、系统的标准启动代码和库代码)结合在一起,并将它们存放在单个文件,即可执行文件中。对库代码来说,链接器只从库中提取我们编写代码中使用函数所需要的代码。

简而言之,目标文件和可执行文件都是由机器语言指令组成的。但目标文件只包含自己编写的代码转换成机器语言,而可执行文件还包含我们编写代码中使用的库例程以及启动代码的机器代码。

C基础——目标代码文件、可执行文件和库
http://bbs.elecfans.com/jishu_467127_1_1.html
(出处: 中国电子技术论坛)

时间: 2024-12-19 08:44:35

C基础——目标代码文件、可执行文件和库的相关文章

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

C程序的执行过程可分为:编辑.编译.连接.运行. 将程序源代码转换为可执行文件,需要编译与连接这两个步骤.编译器将源代码转换为中间代码,然后链接器将此中间代码与其他代码结合起来,生成可执行文件.同时,链接器将你的程序与预编译的库代码结合起来. 目标代码文件所缺少的第一个元素是一种叫启动代码的东西(start-up code),此代码相当于你的程序与操作系统之间的接口. 缺少的第二个东西是库例程的代码,也称为函数. 而链接器的作用就是将目标代码.启动代码和库代码结合在一起,并放在单个文件里,这个文

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

一.C程序开发的一般流程 1:定义程序的目标,明确程序的功能,明确程序中需要哪些信息.计算和控制,明确程序中应该报告什么信息,不会设计到具体的计算机语言,对于问题的描述一般用的是术语: 2:设计程序,考虑如何通过程序实现程序的目标,具体一点说,需要考虑的可以有用户界面的设计.程序的组织.目标用户的确定以及程序开发时间计划,除了这些,好需要确定是在程序中(也有可能是在辅助文件中)数据的表示形式以及数据的处理方法.这个阶段,不会用到具体的代码.问题的描述用的是一般术语,但是不排除某些决策会和具体的语

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

C编程的基本策略是, 用程序把源代码文件转换为可执行文件(其中包含可直接运行的机器语言代码). 典型的C实现通过编译和链接两个步骤来完成这一过程. 编译器把源代码转换成中间代码, 链接器把中间代码和其他代码合并, 生成可执行文件. C 使用这种分而治之的方法方便对程序进行模块化, 可以独立编译单独的模块, 稍后再用链接器合并已编译的模块. 通过这种方式, 如果只更改某个模块, 不必因此重新编译其他模块. 另外, 链接器还将你编写的程序和预编译的库代码合并. 中间文件有多种形式. 我们在这里描述的

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

C编程的基本策略是使用程序将源代码文件转换为可执行文件.C分两步完成这一工作:编译和链接. 编译器将源代码转换为中间代码,链接器将此中间代码与其他代码结合起来生成可执行文件. 中间文件的形式有多选择.最一般的选择是将源代码转换为机器语言代码,将其结果放置在一个目标代码文件中. 目标代码文件缺少的元素:启动代码:库例程代码 链结器的作用是将目标代码,系统的标准启动代码和库代码结合在一起,形成可执行文件.

Node.js学习笔记【3】NodeJS基础、代码的组织和部署、文件操作、网络操作、进程管理、异步编程

一.表 学生表 CREATE TABLE `t_student` ( `stuNum` int(11) NOT NULL auto_increment, `stuName` varchar(20) default NULL, `birthday` date default NULL, PRIMARY KEY  (`stuNum`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 学生分数表 CREATE TABLE `t_stu_score` ( `id` int(11

java_基础——在代码里编译.java文件

[本文介绍] 本文不是深入理解和使用java编译器,只是在代码里编译.java文件的helloWorld.这种技术还是蛮有意思的,说不定在将来的某些只能化项目会运用到!^_^ [编译最基础的流程] [java代码] 1 package com.zjm.www.test; 2 3 import java.io.IOException; 4 5 import javax.tools.JavaCompiler; 6 import javax.tools.JavaCompiler.Compilation

Windows 10开发基础——文件、文件夹和库(二)

主要内容: 使用选取器打开和保存文件 关于文件.文件夹和库,如果深究其实还是有比较多的内容,我们这一次来学习一下选取器就收了.还有上篇博文中读写文本文件的三种方式可以细细体会一下. 文件选取器包含文件打开选取器(FileOpenPicker.FolderPicker)和文件保存选取器(FileSavePicker),分别用来打开文件和保存文件,这两个选取器的使用方法大致相同. FileOpenPicker类: ViewMode ,获取或设置文件选取器用来展示文件或文件夹的视图模式,属性值由Pic

Linux编译多个不同目录下的文件以及静态库、动态库的使用

先看两篇博文,作为基础知识.如果对C/C++编译链接过程都了解的话,可以跳过不看. http://www.firedragonpzy.com.cn/index.php/archives/2556 http://www.cppblog.com/shifan3/archive/2007/01/05/17325.html 一.  编译不同目录下的多个文件 各个文件的布局如下: head.h文件的代码: [cpp] view plaincopy #ifndef  HEAD_H #define  HEAD

从代码到可执行文件

该文出自:http://www.civilnet.cn/bbs/browse.php?topicno=78423 gemfield本文可能对你的编码能力不会产生影响,也可能对提高你的社会地位起不到任何帮助,但世界上总有一些事务是为改变你的世界观而诞生的——就像gemfield本文<从代码到可执行文件> . 正如题目所说的那样,我们得先从一段程序代码开始——gemfield.c. 又正如程序的名字所说的,这是个c语言文件,极其简单. **************************** in