Linux编译器gcc使用

目录

1、预处理 (进行宏替换)

2、编译 (生成汇编)

3、汇编 (生成机器可识别代码)

4、链接 (生成可执行文件或库文件)


预处理:

预处理阶段,编译器会对源代码中的头文件以及预处理语句进行分析,生成.i为后缀的预处理文件

预处理的指令是以#开头的代码行

 gcc -E hello.c -o hello.i

选项 "-E" 该选项的作用是让gcc在预处理结束后停止编译过程。

选项"-o"是指目标文件为已经过预处理的C原始程序

首先我们先创建一个.c的文件 我创建的是一个hello.c在文件中写入要执行的代码,下面是一个简单的代码,主要为了体现预处理头文件的过程 

 

代码写完后保存,输入命令gcc -E hello.c -o hello.i 执行完这句命令 我们可以查看一下tools目录下有什么文件,可以看到已经生成了我们想要的.i文件了 

打开.i文件看一下,里面到底是什么呢?

这么多内容,翻到底层才看到了我们想要看到的代码。 我们开始在.c文件中只输了7行代码,可是在.i文件中 生成了843行代码,最后的几行是我们自己写的.c代码 。那么上边800多行的代码是什么呢? 其实如果仔细看一下,我们可以看见 .i int main() 的上方已经没有了我们写的头文件,所以上边的800多行代码就是经过处理的c原始程序。

编译:

 在这个阶段,gcc首先检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,gcc把代码翻译成汇编语言。

用户可以用-S选项来进行查看,该选项只进行编译

gcc -S hello.i -o hello.s

为了验证在编译阶段。gcc会检查代码的规范以及是否有错误,我故意把最后的一个大括号去掉,接下来,我们看一下是否能编译通过呢? 

 

下面是执行的过程  我们可以看到预处理是通过了,但是编译阶段报出了错误。

然后将错误改正之后,我们在重新编译,一定要从头开始先进性预处理,再编译,否则我们进行编译的还是之前错误的代码

编译后,我们发现多了一个.s文件,这个文件就是我们想要的汇编代码

我们代开.s文件这个就是编译之后的代码

汇编:

 汇编阶段是把编译阶段生成的".S"文件转换成目标文件

我们可以使用”-c"选项就可以看到汇编代码已经生成了.o的二进制代码了

gcc -c hello.s -o hello.o

输入命令,我们可以看到相比于之前,我们多了一个.o文件,那么这个文件是什么呢? 我们不妨打开看一下 

这个是打开的.o文件。。。。。 让我们看来,这个都是什么呀,如果我们编程要写成这种代码的样子,那么我可能要自闭了,,哈哈哈  不过这个可是机器可以识别的代码,所以,我们写的所有代码,最后让机器识别的都是这种二进制的代码格式 。前面的步骤都完成了,就该进入链接阶段了。下来我们继续。。。

 链接:

输入 gcc hello.o -o hello 后 我们可以看待生成了一个hello 

接下来,我们看一下能否正确输入我们想要的结果,输出了"hello world!"  编辑器使用完成! 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值