千家信息网

GCC与编译过程

发表于:2025-02-13 作者:千家信息网编辑
千家信息网最后更新 2025年02月13日,GCC与编译过程GCC(GNU Compiler Colletion),GUN编译器套装,是一套由GNU开发的编程语言编译器。Linux系统下的GCC编译器实际上是调用其他不同的工具来完成预处理、编译
千家信息网最后更新 2025年02月13日GCC与编译过程

GCC与编译过程

GCC(GNU Compiler Colletion),GUN编译器套装,是一套由GNU开发的编程语言编译器。Linux系统下的GCC编译器实际上是调用其他不同的工具来完成预处理、编译、汇编和链接工作。

一、编译过程

在计算机的眼里,只有1和0。不幸的是,我们用C语言写出来的代码,计算机无法直接看明白。所以一个程序如果需要被计算机执行,那么就必须翻译成能被计算机读懂并执行的1和0。实现这一结果的过程,我们称之为编译。

编译包括以下步骤:预处理、编译、汇编和链接。具体过程如下:

1.预处理:

hello.c文件中,预处理指令(入#include,#define,#ifdef,#endif等)经过预处理器解释,将预处理指令展开或者覆盖、将注释删除、添加必要的调试信息之后生成hello.i文件。

对应的命令为:gcc -E hello.c hello.i,表示我们只对其进行预处理阶段。

2.编译

经过预处理器处理之后生成的.i文件仍然是文本文件,计算机无法直接执行。在编译的阶段,编译器需要做词法分析、语法分析,然后根据硬件平台生成对应的汇编文件。不同的硬件平台有不同的编译器。例如x86平台的编译器与ARM交叉编译器生成的汇编文件就大不相同,这也正是C语言实现跨平台最关键的一个步骤:根据硬件平台来编译C代码。

对应的命令:gcc -S hello.i hello.s

3.汇编

编译过后的.s文件,需要继续加工生成.o文件。gcc调用汇编器as将汇编源程序翻译为可重定位文件。可重定位文件指的是文件虽然是一个ELF的可执行指令流,但全局符号还没有定位。由于全局符号可以出现在不同的文件中,因此在编译的过程中需要确定其入口地址,因此,需要进行最后一个步骤,链接。

对应的命令:gcc -c hello.s hello.o

4.链接

经过汇编之后的文件,不能够直接运行,需要通过链接来将全局符号重定位以及合并相同的段。通常情况下,我们需要用它其他库中的函数,链接器就负责扎到我们需要的函数并将其链接进来。一个ELF文件中,会包含需要段,如.text,.data等以及一些自定义的段,链接器会根据链接脚本(如果有的话)将对应的段放在一起。经过以上四个步骤,一个程序就可以被运行了。

对应的命令:gcc -L

编译 文件 链接 预处理 编译器 过程 计算机 生成 不同 命令 平台 步骤 定位 全局 指令 硬件 符号 语言 相同 代码 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全宣传讲座心得体会 北京计算机三级网络技术 株洲办公软件开发公司 服务器1T防护是什么意思 网络安全三权分离 空间数据库安全及并发设计 战地3服务器管理员 美国互联网科技企业排名 青浦区一站式网络技术创新服务 软件开发的成本核算标准是 安全可靠速度快的服务器 数据库到底是干什么的 国际服更换服务器段位会变吗 蚌埠 软件开发招聘 服务器的用途 CCS嵌入式软件开发工具 关于网络安全的句子及评论 满帮集团软件开发待遇 广州红极互联网科技有限公司北京 数据库是一种结构化的数据结合 怎么样删除数据库用户语句 8盘位nas存储服务器 网络安全问题灵魂仙人掌 挑战极限科技互联网公司 网络安全与会计信息化 深圳网络安全概念 南京天下文枢互联网科技江苏 计算机网络技术专业的概念 北邮网络技术研究院就业 服务器管理开源
0