C语言程序的编译、链接具体过程及Linux环境下的具体实例

我们知道一个C语言程序从编写完成到生成可执行文件分为预处理、编译、汇编、链接,最后再生成可执行文件。

预处理阶段

预处理器主要做四部分工作,分别是:头文件展开、宏替换、去注释以及条件编译。

(1)头文件展开就是编译器会根据字符#开头的命令去读取相应的系统文件或者自定义文件, 并把相应的文件直接插入到当前程序代码中,这就完成了头文件的展开。
(2)宏替换就是将程序员自定义的宏变量、宏函数等直接替换,如:#define SIZE 10,在宏替换的过程中直接将代码中出现SIZE的地方用10替换掉,不考虑类型、优先级等,所以在定义和使用宏的时候程序员自己要注意这一问题,宏函数这里先不做具体解释。
(3)去注释就是将代码中的注释部分直接减掉,简单易懂。
(4)条件编译就是根据程员的思考及设计,对程序代码中的部分代码进行处理,配合宏定义语句使得满足条件或者不满足条件的代码直接个当做注释部分一样被裁减掉,具体看程序员自己的设计。

编译阶段

就是将C语言转换成汇编语言的一个过程。汇编语言程序中的每条指令都以一种标准的文本格式确切的描述了一条低级机器语言指令。

汇编阶段

就是将汇编语言就是将汇编语言翻译成机器语言指令的一个过程,由汇编器完成,处理完成之后得到一个二进制文件。

链接阶段

由连接器负责完成,它将代码中调用的库函数、外部函数、程序员自己编写的函数等所有文件(经过汇编阶段完成后得到的二进制文件)处理成一个可执行文件,这就是链接阶段完成的。

Linux环境分阶段查看

(CentOS 7.0 64bit)

Linux环境下在程序的预处理、编译、汇编、链接的过程都可以用gcc的系列命令得到其文本文件,以hello world程序为例,当这个程序编写完成以后(假设命名为hello.c),
(1)用gcc -E hello.c -o hello.i 命令就可以得到一个预处理完成之后的文件,用编辑器打开就可得到前面所提到的头文件展开、宏替换、去注释、条件编译,这四项工作完成以后的文件hello.i,而且可以清楚的看到原hello world程序的变化,
(2)然后用gcc -S hello.i -o hell.s 命令就可以得到一个全是汇编语言的文件hello.s,用文件编辑器打开可以看到一系列的汇编语言代码,
(3)再然后用gcc -c hello.s -o hello.o 命令就可以得到一个二进制文件hello.o,如果用编辑器打开会得到一堆乱码的文件,
(4)最后再用gcc hello.o -o hello 命令就得到一个可执行的文件hello,输入./hello之后就会在屏幕上显示hello world.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值