C语言的编译过程

先上图 

这是通过gcc编译的总体过程 ,分步查看

首先,创建一个项目,只有一个源文件main.c

打开mingw64.exe文件,在命令行中进入到项目所在的目录中,像这样

执行编译第一步,预处理,命令:

gcc -E main.c -o main.i

执行完成后,命令行中长这样

idea中长这样

多出来一个main.i的文件,这个文件是宏展开以后得文件,就是将main.c中的

#include <stdio.h>

替换成stdio.h文件的内容。

然后进行第二步,将得到的main.i编译成汇编指令,执行命令

 gcc -S main.i -o main.s

执行完成以后,命令行里长这样

idea里长这样

多出来一个main.s的文件,这是编译完成的汇编指令。

第三步,将main.s编译成目标文件,命令

gcc -c main.s -o main.o 

执行完以后,命令行看长这样

idea里看长这样

多出来一个main.o的文件,这个目标文件main.o还没有链接,不能运行,链接完成以后才能运行。链接就是将函数调用替换成函数真实的地址。

通过file命令查看main.o文件

得到一句话

main.o: Intel amd64 COFF object file, no line number info, not stripped, 7 sections, symbol offset=0x280, 22 symbols, 1st section name ".text"

 其中的COFF文件

官方描述:
COFF(Common Object File Format)是一种常见的目标文件格式,用于存储可重定位目标文件、静态库文件和可执行文件。COFF最初由UNIX System Laboratories(USL)定义,现在被广泛地使用在各种操作系统上,包括Windows、Linux和BSD等。
COFF格式的目标文件由多个段(Section)组成,每个段包含一定范围的数据,例如代码、数据和符号表等。每个段都有一个段头(Section Header),它包含有关该段的信息,例如名称、大小、地址、属性等。段头表(Section Header Table)记录了所有段头的信息。
COFF格式的可执行文件由多个段、符号表和重定位表等组成。符号表用于记录程序中的符号信息,例如函数名和变量名,重定位表则用于在程序加载时对代码中的符号和地址进行重定位。可执行文件还包含程序入口点和其他可执行代码相关的元数据。
COFF是一种通用格式,它被多种编译器、链接器和调试器所支持。具体而言,COFF格式在Windows和MS-DOS上得到广泛应用,在Unix/Linux上也有被广泛使用。

第四步,通过ld命令可以查看文件 缺少的文件链接地址

ld main.o

三个函数找不到

第五步,通过gcc -v main.o -o main

得到exe可执行文件

 

  • 7
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值