栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【C语言】程序编译与链接

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【C语言】程序编译与链接

【C语言】程序编译与链接 由我们所编写的源程序文件(文件后缀名为 .c)经过一系列的处理后,生成可执行文件(文件后缀名为**.exe**)

程序实现的过程中,电脑中存在两个环境:翻译环境(用于将源代码转换为机器指令) 和 运行环境(执行翻译生成的机器指令)

在翻译环境中将源代码翻译为机器指令的过程中,分为两大部分:> 编译 和 链接

在一个工程(solution)下,通常可能存在多个源程序文件,在编译过程中,各个源程序文件会单独被 编译器 编译为各个目标文件(文件后缀名为 .obj),各个目标文件会与 链接库(主要是各种库函数) 在 链接器 的处理下,生成一个完整的可执行程序

编译部分分为三大部分:> 预编译 编译 汇编

在VS中,可以通过使用 extern 的声明 来使用处于其他源文件中的函数;
预编译(又称为预处理)
gcc test.c -E -o test.i


在预编译阶段

#inlcude 

#include
#pragama
#define   

删除注释:在预编译阶段会 被删除 或者 被替换为空格

预编译阶段的操作主要是 文本操作

编译
gcc test.i -S


将 C语言代码 转换为 汇编代码:

  1. 语法分析
  2. 词法分析
  3. 语义分析
  4. 符号汇总:主要对全局的符号(变量)进行汇总
汇编
gcc test.s -c



会将编译阶段生成的汇编代码转化成二进制指令

在符号汇总之后,在汇编阶段形成符号表

链接

在链接阶段会采取以下操作:

  1. 合并段表:Linux环境利用elf来组织文件,可以使用命令 readelf 来读取目标文件
  2. 符号表的重定位:将 函数声明中的符号地址 替换为 实际函数的符号地址
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303981.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号