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

C编程的基本策略是使用程序将源代码文件转换为可执行文件,此文件包含可以运行的机器语言代码。C分两步完成这一工作:编译和链接。编译器将源代码转换为中间代码,链接器将此中间代码与其他代码相结合来生成可执行文件。C使用被划分为两部分的这一方法使程序便于模块化。我们可以分别编译各个模块,然后使用链接器将编译过的模块结合起来。这样,如果需要改变一个模块,则不必重新编译所有其他模块。同时,链接器将自己的程序与预编译的库代码结合起来。
中间文件的形式有多种选择。最一般的选这,同时也是大部分C程序员的选择,是将源代码转换为机器语言代码,将结果放置在一个目标代码文件(简称为目标文件)中。虽然目标文件包含机器语言代码,但该文件还不能运行。目标文件包含源代码的转换结果,但该转换结果并不是一个完整的程序。
目标代码文件中的所缺少的第一个元素的一种叫做启动代码(start-up code)的东东,此代码相当于自己程序和操作系统之间的接口。
目标代码中缺少的第二个元素是库函数的代码。几乎所有C程序都利用标准C库中包含的库函数。比如printf()函数,目标代码文件不包含这一函数的代码,它只包含声明使用printf()函数的指令。实际代码存储在库中。库文件中包含许多函数的目标代码。
链接器的作用是将这3个元素(目标代码、系统的标准启动代码和库代码)结合在一起,并将它们存放在单个文件,即可执行文件中。对库代码来说,链接器只从库中提取我们编写代码中使用函数所需要的代码。
简而言之,目标文件和可执行文件都是由机器语言指令组成的。但目标文件只包含自己编写的代码转换成机器语言,而可执行文件还包含我们编写代码中使用的库例程以及启动代码的机器代码。

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

转载于:https://www.cnblogs.com/jewn00/p/5271419.html

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

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

    C编程的基本策略是使用程序将源代码转换为可执行文件,此文件包含可运行的机器语言代码.C分两步完成这一工作:编译和链接.编译器将源代码转换为中间代码,连接器将此中间代码与其他代码相结合来生成可执行文件. ...

  2. 解释源代码文件、目标代码文件和可执行文件之间的区别

    源代码到可执行文件的过程: 编译器驱动程序读取源文件(hello.c和main.c),经过预处理.编译.汇编.链接(分别使用预处理器.编译器.汇编器.链接器,这四个程序构成了编译系统)四个步骤,将其翻 ...

  3. Keil实现软件版本号与实际编译生成的目标代码版本自动一一对应

    为何有这个需求? 做嵌入式软件开发的人对于手工维护版本号总是心有抵触.因为代码提交很频繁,如果每次提交都需要手动修改子版本号,不胜其烦.而且难免会有遗漏的时候,这样版本号就失去了意义,并不能指明其与代 ...

  4. 软件安全之代码注入技术 向目标 PE 文件注入 DLL notepad lpk.dll 远程线程函数 提权函数 OpenProcess VirtualAllocEx

    实验 4 代码注入技术 引言 1.实验说明 代码注入是将用户代码注入到其他进程或者可执行文件中,实现拦截目标进程运行过程的关键信息.改变目标进程或可执行文件原本执行流程等目的 2.实验目的 本实验通过 ...

  5. 计算机科学基础知识(四): 动态库和位置无关代码

    一.前言 本文主要描述了动态库以及和动态库有紧密联系的位置无关代码的相关资讯.首先介绍了动态库和位置无关代码的源由,了解这些背景知识有助于理解和学习动态库.随后,我们通过加-fPIC和不加这个编译选项 ...

  6. 基础IO(文件接口、安装内核源码超详细步骤图解、静态库与动态库)

    基础IO C语言的文件操作接口 fopen fclose fread fwrite fseek 系统调用文件接口 open close read write lseek 安装内核源码 文件描述符&am ...

  7. Python基础知识点拾遗---文件IO(os、filecmp、shutil库)、sys库、序列化(pickle)、类

    Python基础知识点拾遗 文件IO 文本 目录 os 获取文件的创建.修改及最近访问时间 获取当前文件的大小 获取当前的登录用户名称 获取当前的cpu核数 调用操作系统底层的random生成器 sh ...

  8. 【Git】Git 基础命令 ( 添加暂存文件 git add | 提交文件至版本库 git commit | 查看版本库状态 git status | 查询文件修改 git diff )

    文章目录 一.添加暂存文件 git add 二.提交文件至版本库 git commit 三.查看版本库状态 git status 四.查询文件修改 git diff 一.添加暂存文件 git add ...

  9. java class文件 代码_java_基础——用代码编译.java文件+加载class文件

    java_基础--用代码编译.java文件+加载class文件 java_基础--用代码编译.java文件+加载class文件 [简单编译的流程] package com.zjm.www.test; ...

最新文章

  1. PW Live 直播 | 清华大学王晓智:事件抽取的进展与挑战
  2. 完整国内城市js级联选择
  3. 极光推送指定用户推送_干货|SpringBoot集成极光推送完整实现代码(建议收藏)...
  4. python安装第三方库时报错 SyntaxError: invalid syntax
  5. python列表json_python-带有列表的JSON_normalize JSON文件包含字...
  6. Starling GodRay 效果实现
  7. Python打包成exe,pyc
  8. Hibernate注解与JPA
  9. Linux进程间通信--命名管道
  10. 说说命令提示符:tcping命令、tcp协议和ping命令
  11. 欧姆龙OMRON PLC程序,威纶触摸屏螺丝机 配方程序。 用ST语言编写程序+威纶触摸屏程序
  12. 地理和遥感数据获取方法
  13. 白盒测试:三角形问题实验报告
  14. MMO与弱交互游戏的服务端技术区别
  15. Excel高手都会的Shift快捷键7个用法,让工作效率翻倍
  16. 百度统计API的使用
  17. 如何用linux搭建简单的论坛
  18. 金三银四求职季,程序员面试必备——编程语言篇
  19. 在Spydroid-ipcamera基础上做推流的实现之二
  20. ffmpeg 解码视频小例子

热门文章

  1. glutSwapBuffers函数用法
  2. 进行直播间搭建时需要注意的小细节
  3. BZOJ4921「Lydsy1706月赛」互质序列
  4. js如何判断字符串里面是否含有某个字符串
  5. 【C++多线程系列】【七】实现经典的C/S架构
  6. 中国联通与阿里宣布相互开放云计算资源
  7. UVA 11627 Slalom(二分)
  8. java中volatile关键字的含义
  9. 阿里云服务器问题攻略
  10. nginx---ngix虚拟主机配置实例