程序的链接和装载(1)--被隐藏的处理

本文探讨了在Linux环境下,通过gcc编译HelloWorld程序时经历的预处理、编译、汇编和链接四个步骤。预处理主要处理宏定义、条件指令和#include;编译阶段涉及词法分析、语法分析、语义分析和优化,生成汇编代码;汇编阶段将汇编代码转换为机器码;链接则负责符号绑定和地址空间分配,解决符号定义和地址问题。
摘要由CSDN通过智能技术生成

    在当今这个时代,我们有着各种各样非常强大的集成开发工具,得益于它们那些强大的诸如符号解析,引用构建,代码补全,一键式编译,类库支持等等功能,我们可以从工程本身的结构中抽身出来,专注于业务和功能。但是,不好的一点在于,对于很多新手来说,IDE便成为了一个夹在源代码和可执行文件中间的黑盒,那些被隐藏的处理一旦出现了错误,他们往往不知道如何去解决这些问题。

    以下面这段几乎每个程序员都能闭眼写出的HelloWorld而言,在linux下当我们执行 "gcc Hello.c -o Hello"后,最终便成生了名为Hello的可执行程序。

#include<stdio.h>

int main()
{
    printf("Hello World!\n");
    return 0;
}

    事实上,gcc的上述处理其实可以分解为4个步骤,预处理,编译,汇编,链接,如下图所示:

1.预处理

    预处理其实也可以使用gcc命令来单独完成,对于上述编译链接过程,第一步预处理其实相当于执行了如下命令:

    gcc -E hello.c -o

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值