Linux 开发工具
-
gcc
GCC 编译器是 Linux 下默认的 C/C++ 编译器,大部分 Linux 发行版中都是默认安装的。GCC 编译器通常以 Linux 命令的形式在终端(Shell)中使用
- 查看是否安装gcc
-
安装gcc
yum install gcc // 换源速度更快
-
编译
将源文件编译成目标文件需要使用
-c
选项,例如:
gcc -c main.c
main.c会被编译为 main.o:
GCC 编译器
目标文件的后缀为
.o
一个源文件会生成一个目标文件,多个源文件会生成多个目标文件,源文件数目和目标文件数目是一样的。通常情况下,默认的目标文件名字和源文件名字是一样的。
如果希望自定义目标文件的名字,那么可以使用
-o
选项,例如:
gcc -c main.c -o a.o
这样生成的目标文件的名字就是 a.o。
- 链接
gcc
命令后面紧跟目标文件的名字,就可以将目标文件链接成为可执行文件,例如:
gcc main.o
就将 main.o 链接为 a.out。
在gcc命令后面紧跟源文件名字或者目标文件名字都是可以的,gcc命令能够自动识别到底是源文件还是目标文件:如果是源文件,那么要经过编译和链接两个步骤才能生成可执行文件;如果是目标文件,只需要链接就可以了。使用-o
选项仍然能够自定义可执行文件的名字,例如:
gcc main.o -o main.out
这样生成的可执行文件的名字就是 main.out。
-
编译流程
-
将C语言源程序预处理,生成
.i
文件。 -
预处理后的.i文件编译成为汇编语言,生成
.s
文件。 -
将汇编语言文件经过汇编,生成目标文件
.o
文件。 -
将各个模块的
.o
文件链接起来生成一个可执行程序文件。
-
-
gcc常用选项
-S
将C语言源文件编译为汇编语言,但是并不汇编该程序。使用该选项,我们可以查看C语言代码对应的汇编代码。
-E
选项将C语言源文件进行预处理,但是并不编译该程序。对于一般的预处理问题,可以使用这个选项进行查看,例如,宏的展开问题、文件的包含问题等。
-I
由于指定包含的头文件的目录,这一点对于大型的代码组织来说是很有用的。
-g
选项可生成能被 gdb 调试器所使用的调试信息。只有使用了该选项后生成的可执行文件,才带有程序中引用的符号表。这时 gdb 调试程序才能对该可执行程序进行调试。
-
gdb
gcc -g -c main.c
gcc -o main main.o
要想生成可以调试的可执行文件,需要在编译的时候加上-g选项,不用在链接的时候加。如果没有-g,你将看不见程序的函数名,变量名,所代替的全是运行的内存地址。
开启
gdb
设置断点
break
运行程序
run
显示出与断点相邻的10行代码
list
单步调试(函数内或外)
“next”严格保证控制点在当前范围,而“step”会跟随执行进入到函数内部。
如果断点设置在调用函数的那一行,使用next控制点直接跳到下一行。如果使用step控制点会跳到函数内部的第一行。
检查变量
print
修改变量
set =
设置监视点
watch
退出
如果想要在你的程序暂停时退出程序,使用“kill”命令,如果想退出GDB,使用“quit”命令