Linux入门:编译及简单调试

本文介绍了Linux环境下,使用gcc/g++进行编译的四个步骤:预处理、编译、汇编和链接,以及gdb调试器的基础使用,包括设置断点、查看变量和调用堆栈。此外,还讲解了make和makefile的原理,如何自定义规则和变量,以简化编译流程。
摘要由CSDN通过智能技术生成

前言

这里介绍了一些编译,简单调试及make,makefile的过程,可以供大家参考和学习

一、gcc/g++编译器

在Linux中,gcc是对C语言进行编译的,g++是对C++进行编译的
编译程序需要经历四个过程:

1.预处理

预处理阶段编译器需要进行的过程:1.进行宏替换。2.将头文件展开。3.去注释。 4.条件编译。
在Linux中,需要我们输入:
gcc/g++ -E [file] -o [file].i
预处理后生成的文件以.i为后缀。
在这里插入图片描述

2.编译

编译阶段编译器需要进行的过程:语法语义的检测,并将源代码转换为汇编代码。
在Linux中,需要我们输入:
gcc/g++ -S [file] -o [file].s
编译后生成的文件以.s为后缀。
这里的file可以是还没有预处理过的.c文件,也可以是已经进行预处理过的.i文件,如果file是.i文件,则直接进行进行编译,如果是.c文件,则进行预处理和编译两个过程。
在这里插入图片描述

3.汇编

汇编阶段编译器需要进行的过程:将汇编代码转换为机器代码(二进制代码)。
在Linux中,需要我们输入:
gcc/g++ -c [file] -o [file].o
汇编后生成的文件称为目标文件,以.o为后缀,相当于windows下的xxx.obj文件格式。
在这里插入图片描述

4.链接

链接阶段编译器需要进行的过程:用目标文件+库文件生成可执行程序。
动态链接:gcc/g++ [file] -o [生成可执行程序的名称]
静态链接:gcc/g++ [file] -o [生成可执行程序的名称] -static
在这里插入图片描述
file [文件名]:可以查看当前文件的详细信息
在这里插入图片描述
ldd:可以查看可执行程序依赖的库文件
在这里插入图片描述
如果可执行程序是动态链接的,则会将代码当中依赖其他库函数的符号表在链接时编译到可执行程序中

二、gdb调试器

注:程序默认编译为release版本,如果想要编译成debug版本则需要加上命令行参数-g,只有在debug版本下才能够进行调试
gcc/g++ [file] -o [生成可执行程序的名称] -g
gdb下的操作:
①l(list):查看文件内容
②r(run):运行程序
在这里插入图片描述
③b [行号]:在某一行打断点
④i b (info breakpoint):查看所有断点信息
在这里插入图片描述
disable [断点序号]:使断点失效
enable [断点序号]:使断点生效
⑤n(next):逐过程执行,不进入函数,相当于F10
s(step):逐语句执行,进入函数,相当于F11
⑥p [变量名称]:打印变量的值
⑦bt/where:查看函数的调用堆栈(非常重要)

三、make及makefile

make是解释器,用来解释makefile文件。
makefile是书写编译规则的文件。
用make解释马makeile文件,可以自动生成可执行程序。

1.makefile文件书写规则

在这里插入图片描述

2.makefile文件书写规则make&makefile解释规则

①make会在当前目录下寻找名字叫Makefile或者makefile的文件
②永远只为生成第一个目标对象而服务
③若目标对象相对于依赖对象而言较新,则不生成
④make在生成第一个目标对象的时候,如果依赖对象也需要后续生成,则先生成依赖对象之后,使用依赖对象生成目标对象

3.内置变量和自定义变量

内置变量:
$^:代表所有的依赖对象
$@:代表所有目标对象
自定义变量:
在这里插入图片描述
增加这些内置变量和自定义变量后,可以使makefile文件的书写变得简洁
在这里插入图片描述

总结

gcc/g++,make及makefile对后期学习Linux十分重要,gdb也是后期调试代码中必不可少的一个过程。如果文章中有什么问题,还懂哥请指教!
未完待续!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值