gcc编译和gdb调试的学习
gcc与g++基本用法
GCC编译流程分为四个步骤: 编译预处理、编译、汇编和链接
gcc最基本的用法是∶gcc [options] [filenames]
使用gcc可以让源文件编译停在上述四个编译步骤的某一步,具体如下:
-
预编译(Pre-Processing)
预编译是在程序被编译之前为编译器所做的一些准备工作,主要是 拷贝包含的头文件到源程序文件、把宏替换成具体的数和处理条件编译。我们使用-E选项来使得GCC编译器在完成预处理后停止执行。
g++ -E test.cpp -o test.i -
编译(Compiling)
在这个阶段中,GCC编译器首先要 检查代码的规范性,有无语法错误,检查无误后再将代码翻译成汇编语言。 我们使用-S选项来使得GCC编译器只将输入的文件编译成汇编代码,而不再进一步处理。
g++ -S test.cpp -o test.s 或
g++ -S test.i -o test.s -
汇编(Assembling)
汇编阶段就是把编译阶段生成的 .s文件转换成目标文件。在此可使用选项-c来生成.o的二进制目标代码。
g++ -c test.cpp -o test.o 或
g++ -c test.s -o test.o -
链接(Linking)
在成功编译后,就进入了链接阶段。所谓链接就是把 前面生成的目标文件及所用到的库函数链接成一个可执行文件。
g++ test.cpp -o test.out 或
g++ test.o -o test.out -
编译过程总结:预编译——》代码无错误时,翻译成汇编语言(编译)——》翻译成二进制代码(汇编)——》将汇编得到的目标文件及所用到的库函数链接成一个可执行文件(链接)
-
命令总结
-o:指定生成的输出文件的名字,默认为a.out;-E:仅执行编译预处理;-S:将C代码转换为汇编代码;- wall:显示警告信息;-c:仅执行编译操作,不进行连接操作。
g++使用规则和gcc一样。gcc和g++两者都可以编译c和cpp文件,但存在差异。gcc在编译cpp时语法按照c来编译但默认不能链接到c++的库(gcc默认链接c库,g++默认链接c++库)。g++编译.c和.cpp文件都统一按cpp的语法规则来编译。所以一般编译c用gcc,编译c++用g++。
gdb调试
编译:g++ -g test.cpp -o test.out
调试:gdb test.out
调试命令说明:
以后再来补充。。。。。。。
https://blog.csdn.net/u013525455/article/details/52813637
调试方法好像有查看调用栈,这时什么意思?C++查看调用栈??
怎么查看呢?
C++调试方法??》
其他
1.如果没有给出可执行文件的名字,gcc将生成一个名为a.out的文件
2. 在Linux系统中,可执行文件没有统一的后缀,系统从文件的属性来区分可执行文件和不可执行文件。而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