程序翻译的过程,linux环境下处理,生成 .i、.s、.o 文件(预处理、编译、汇编、链接)

1. 程序翻译的过程有四个步骤,预处理->编译->汇编->链接。

那么每个步骤是干什么?

预处理阶段:处理-> 头文件、宏替换、条件编译等等,我用 linux 环境查看一下,如下:

首先写一个简单的 .c 文件,里面包含宏替换、头文件、条件编译等等,我写了这三个。

#include <stdio.h>    
    
#define N 2    
    
int main()    
{    
    printf("%d\n", N);    
    
    
#ifdef DEBUG                                                                                                             
    printf("debug\n", );    
#else    
    printf("nodebug\n");    
#endif    
    
    return 0;    
}  

然后 linux 中,用 gcc -E -o Test.i Test.c 这条命令就是处理预处理,生成 .i 文件,我就简单截几张图,因为生成的 .i 800多行,如下:

那么编译呢?

编译是把代码转成汇编代码,这里用到的命令是 gcc -S -o Test.s Test.i ,如下:

那么汇编呢?

汇编是把汇编代码转成二进制文件,也就是机器可以识别的二进制语言,用到的命令是 gcc -c -o Test.o Test.s ,下面是二进制文件的内容,前面的还可以看懂,这个就看不懂了。

 

也可以用二进制指令打开看一下文件中的二进制,命令 od Test.o ,我简单截一下图,如下:

那么最后链接呢?

链接就是编译链接你所写的程序需要用到那写库,然后去链接找你需要的那些库,命令 gcc -o Test Test.o ,生成的 Test 文件就是可执行文件,执行的结果如下:

这里解释一下,命令中 -o 紧跟着的文件你需要生成的文件,你也可以将 gcc -o Test Test.o 写成 gcc Test.o -o Test

如果记不住有个技巧就是,预处理 编译 汇编 所对的命令参数是 ESc,生成的文件后缀名是 ios

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值