gcc的编译过程

一、gcc的编译过程、

  1. 源文件 xxx.c
  2. 预处理文件 xxx.i
  3. 汇编文件 xxx.s
  4. 未链接的二进制文件 xxx.o
  5. 通过连接,产生最终可执行的二进制文件

二、编译步骤的工作

1、预处理

  • 头文件被包含进来(复制): #include
  • 宏定义会被替换:#define
  • 取消宏定义: #undef
  • 条件编译: #if #ifdef #ifndef #else #elif #endif
  • 修改行号以及文件名: #line 998 "Hello.c"

​ -------------在源文件中添加 #line 行号 “文件名.c”可以使预编译产生的文件按照对应的行号和文件名做标记

  • 清除注释

2、编译

生成汇编文件

3、汇编

生成一个ELF格式的可重定位文件,即该文件包含让处理器直接运行的指令流,但它的全局符号未定位,其所有地址都是0

4、链接

  • 重定位
  • 合并权限相同的段,可理解为将多个文件合并为一个文件

三、查看各步骤的信息

1、预处理

gcc macro01.c -o macro01.i -E

2、编译

gcc macro01.i -o macro01.s -S

3、汇编

gcc macro01.s -o macro01.o -C


查看lef文件,重定位文件,可以看到上一节图片的内容
readelf macro01.o -a

4、链接

gcc macro01.o -o macro01 -lc -lgcc
-lc:链接标准C库
-lgcc:链接gcc库
posted @   被迫学习  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示