.c文件编译过程(二进制可执行文件生成过程以及链接器)

我们平时写的.c文件是如何编译的呢。下图很好的诠释了这一过程
在这里插入图片描述

主要有四个步骤

第一步预处理:使用预处理器(cpp)处理C语言文件中的预处理命令。这时候C语言文件还是一个.c文件.

第二部编译:使用C编译器gcc,将C语言源码文件编译成汇编文件file.s。

第三步汇编:使用汇编器as将汇编代码汇编成二进制的.o文件(又称目标文件)。

第四步链接:最后使用链接器ld将目标文件和目标文件中用到的一些库文件进行链接生成linux下elf格式的可执行文件,这个可执行文件才可以在linux平台下面运行。

下面是目标文件的链接过程

首选介绍下目标文件的构成:在这里插入图片描述每一个目标文件都由这三段组成

在这里插入图片描述

关于链接器简单讲就是一个组装器,它的作用是将目标文件(零件)组合成可执行文件(一台机器),链接脚本文件(安装图纸)的作用是决定目标文件中的某个段放在可执行文件中的位置。图中file就是可执行文件。

链接脚本文件:
在这里插入图片描述
注意这条指令:arm-linux-ld -o hello hello.o main.o -T hello.lds
ld是链接器,将多个目标文件(hello.o和main.o)链接生成一个可执行文件
(hello),通过-T指定链接脚本文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值