gcc编译和gdb调试的学习

GCC编译流程

GCC编译流程分为四个步骤: 编译预处理、编译、汇编和链接
在这里插入图片描述
gcc最基本的用法是∶gcc [options] [filenames]
使用gcc可以让源文件编译停在上述四个编译步骤的某一步,也可以一步到位直接得到最后的可执行文件,具体如下:

  • 预编译(Pre-Processing)
    预编译是在程序被编译之前为编译器所做的一些准备工作,主要是 拷贝包含的头文件到源程序文件、把宏替换成具体的数和处理条件编译。我们使用-E选项来使得GCC编译器在完成预处理后停止执行。
    gcc -E test.c -o test.i
  • 编译(Compiling)
    在这个阶段中,GCC编译器首先要 检查代码的规范性,有无语法错误,检查无误后再将代码翻译成汇编语言。 我们使用-S选项来使得GCC编译器只将输入的文件编译成汇编代码,而不再进一步处理。
    gcc -S test.c -o test.s 或
    gcc -S test.i -o test.s
  • 汇编(Assembling)
    汇编阶段就是把编译阶段生成的 .s文件转换成目标文件。在此可使用选项-c来生成.o的二进制目标代码
    gcc -c test.c -o test.o 或
    gcc -c test.s -o test.o
  • 链接(Linking)
    在成功编译后,就进入了链接阶段。所谓链接就是把 前面生成的目标文件及所用到的库函数链接成一个可执行文件
    gcc test.c -o test.out 或
    gcc test.o -o test.out

编译过程总结:预编译——》代码无错误时,翻译成汇编语言(编译)——》翻译成二进制代码(汇编)——》将汇编得到的目标文件及所用到的库函数链接成一个可执行文件(链接)

命令总结:
-E:仅执行编译预处理;-S:将C代码转换为汇编代码;-c:仅执行编译操作,不进行连接操作。
-o:指定生成的输出文件的名字,默认为a.out;

g++的编译流程和gcc一样。

测试程序:

#include<stdio.h>

int main(){
        printf("这是测试程序\n");
        return 0;
}

gdb调试

请直接参考:gdb调试
我觉得gdb对我没什么用。知道gdb是对生成的二进制文件进行调试就行。

其他

1.如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件
2. 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。所以gcc最后输出的可执行文件名可以是任意的,但是为了方便对文件进行区别,一般命名为.out文件
3. 虽然gcc最后输出的可执行文件名可以是任意的,但是gcc的输入文件名不可以是任意的,因为gcc是通过后缀来区别输入文件的类别。

参考:
gcc和g++:
https://blog.csdn.net/yang_quan_yang/article/details/80996032
https://blog.csdn.net/qq_42475711/article/details/85224010
gdb调试:
https://blog.csdn.net/u013525455/article/details/52813637

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值