【Linux】gcc——预编译 编译 汇编 链接

main.c ==>main要经历四步骤: 预编译 编译 汇编 链接

一、预编译

  • gcc -E main.c -o main.i

处理 “#”
(1)删除#define,并作文件替换
(2)递归展开头文件(头文件里还可以嵌套)
(3)处理预编译指令( 如#if #endif)
(4)删除所有注释
(5)添加行号和文件名标识
(6)保留#pragma指令
(#pragma lib 指定当前程序运行需要链接的库 所以在链接阶段处理)

二、编译

  • gcc -s main.c -o main.s

(1)词法分析
(2)语法分析(一行表达式)
(3)语义分析(结合上下文)
(4)代码优化
(5)生成汇编指令 (仍是低级语言)

三、汇编

翻译指令

  • gcc -c main.s -o main.o

注意 :汇编用./main.o不能运行的~!
原因有两个:一是符号地址未被确定;二是用的一些其他方法还未被链接

四、链接

  • gcc main.o -o main

上面说了只有一个文件时的操作,当有多个文件时可以用下面的方法
假如有三个文件 main.c a.c b.c (只能有一个主函数)
(1)可多步完成:
gcc -c main.c
gcc -c a.c
gcc -c b.c
gcc -o main main.o a.o b.o

(2)可一步完成:gcc -o main main.c a.c b.c

小知识点Linux上可执行程序的文件格式是ELF;Windows上是PE格式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值