Linux下gcc的使用与程序的翻译

gcc介绍

gcc是一款编译C语言编译器,可以把我们用vim写的代码编译成可执行程序。编译C++用g++进行编译,C++的文件后缀是test.cc或test.cpp或test.cxx
如果要安装g++就执行以下命令

sudo yum install gcc-c++//g++内核底层是gcc

在这里插入图片描述
gcc + 程序 就会形成可执行文件,默认是a.out,如果目录下已经存在,那么就会把a.out覆盖掉。

gcc -o + newname + 程序:给编译后的可执行程序重命名
gcc + 程序 -o + newname:给编译后的可执行程序重命名在这里插入图片描述

程序的翻译过程

程序的翻译过程包括预编译,编译,汇编和链接

预编译

预编译就是把程序进行宏替换,去注释,头文件展开等等,把代码变简单,预编译过后还是C语言文件
需要理解的是,添加头文件是添加声明,就算我们不添加头文件,我们自己声明函数在C文件的开头也是可以的。

通过vim写下面一串代码,演示预编译的过程
在这里插入图片描述

gcc -E test.c -o newname//预处理命令
通过上述命令把生成的预编译文件写进新建的文件,建议后缀为“ .i ”,如果没有新的文件名,那么新建的文件就会打印在屏幕上。
在这里插入图片描述

用vim打开预编译后的文件,发现头文件展开了,宏被替换了,注释也没有了
在这里插入图片描述

编译

编译的过程是进行词法分析和语法分析的过程,然后把C语言编译成汇编语言。并且对自己的符号进行汇总,就是对自己定义的变量函数等汇总起来

gcc -S 预编译过的文件 -o newname//生成汇编文件的命令
也可以直接从c文件直接变为汇编文件
在这里插入图片描述

用vim打开刚刚生成的文件,里面就是汇编语言
在这里插入图片描述

汇编

把汇编语言编译成为二进制目标文件
Windows里面生成的文件就是obj为后缀的文件,就是目标文件
每个C文件都会生成一个obj文件
还有对上一步编译汇总得到的符号生成符号表。

gcc -c 汇编过的文件 -o newname//生成可重定位目标文件的命令

在这里插入图片描述
下面是Windows下面两个C文件分别生成的obj文件。
在这里插入图片描述

链接

把库函数以及其他目标文件链接起来形成可执行程序
链接是一个复杂的过程,链接的时候需要把一堆文件链接在一起才生成可执行程序。
链接过程主要包括:地址和空间分配,符号决议和重定位等这些步骤。重定位就是将上面的符号表进行修正得到真正的地址的过程。
链接解决的是一个项目中多文件、多模块之间互相调用的问题。

gcc test.o -o newname
也可以直接gcc test.o 后面什么都不加,直接形成可执行程序,这就是链接的过程
上述命令和最开始一部形成可执行文件一样,都是gcc + 文件
在这里插入图片描述

命令行式宏定义

如图,没有v1 的宏定义,但是可以通过命令行式的定义宏
gcc -D v1 test.c
如图2,这种定义宏的方式,可以更方便的改变宏
在这里插入图片描述在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值