Linux下的gcc/gdb

Linux底下C/C++开发工具的使用主要包括两个部分:
1、编译工具—>gcc;
2、调试工具—->gdb。

一、编译工具—>gcc:

简介:

通常所说的GCC是GUN Compiler Collection的简称,除了编译程序之外,它还含其他相关工具,所以它能把易于人类使用的高级语言编写的源代码构建成计算机能够直接执行的二进制代码。GCC是Linux平台下最常用的编译程序,它是Linux平台编译器的事实标准。同时,在Linux平台下的嵌入式开发领域,GCC也是用得最普遍的一种编译器。GCC之所以被广泛采用,是因为它能支持各种不同的目标体系结构。例如,它既支持基于宿主的开发(简单讲就是要为某平台编译程序,就在该平台上编译),也支持交叉编译(即在A平台上编译的程序是供平台B使用的)。目前,GCC支持的体系结构有四十余种,常见的有X86系列、Arm、PowerPC等。
gcc命令提供了非常多的命令选项,但并不是所有都要熟悉,初学时掌握几个常用的就可以了,到后面再慢慢学习其它选项。

常用编译命令选项:

假设源程序文件名为test.c。
1.无选项编译链接
用法:#gcc test.c
作用:将test.c预处理、汇编、编译并链接形成可执行文件。这里未指定输出文件,默认输出为a.out。
2.选项-o
用法:#gcc test.c -o test
作用:将test.c预处理、汇编、编译并链接形成可执行文件test。-o选项用来指定输出文件的文件名。
3.选项-E
用法:#gcc -E test.c -o test.i
作用:将test.c预处理输出test.i文件。
4.选项-S
用法:#gcc -S test.i
作用:将预处理输出文件test.i汇编成test.s文件。
5.选项-c
用法:#gcc -c test.s
作用:将汇编输出文件test.s编译输出test.o文件。
6.无选项链接
用法:#gcc test.o -o test
作用:将编译输出文件test.o链接成最终可执行文件test。
7.选项-O
用法:#gcc-O1 test.c -o test
作用:使用编译优化级别1编译程序。级别为1~3,级别越大优化效果越好,但编译时间越长。
8选项 –Wall
gcc -Wall test.c -o test
编译test.c时给出警告信息。
GCC给出的警告信息虽然从严格意义上说不能算作错误,但却很可能成为错误的栖身之所。一个优秀的Linux程序员应该尽量避免产生警告信息,使自己的代码始终保持标准、健壮的特性。所以将警告信息当成编码错误来对待,是一种值得赞扬的行为!
9选项 –g
gcc -g test.c -o test
-g 产生一张用于调试和排错的扩展符号表。-g选项使程序可以用GNU的调试程序GDB进行调试。优化和调试通常不兼容,同时使用-g和-O(-O2)选项经常会使程序产生奇怪的运行结果。所以不要同时使用-g和-O(-O2)选项。
10
-Idir 将dir目录加到搜寻头文件的目录列表中去,并优先于在gcc缺省的搜索目录。在有多个-I选项的情况下,按命令行上-I选项的前后顺序搜索。dir可使用相对路径,如-I../inc等。
-Ldir 将dir目录加到搜寻-l选项指定的函数库文件的目录列表中去,并优先于gcc缺省的搜索目录。在有多个-L选项的情况下,按命令行上-L选项的前后顺序搜索。dir可使用相对路径。如-L../lib等。
-lname 在连接时使用函数库libname.a,连接程序在-Ldir选项指定的目录下和/lib,/usr/lib目录下寻找该库文件。在没有使用-static选项时,如果发现共享函数库libname.so,则使用libname.so进行动态连接。
-static 禁止与共享函数库连接。
-shared 尽量与共享函数库连接.

多源文件的编译方法:

如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test1.c和test2.c]
1.多个文件一起编译
用法:#gcc test1.c test2.c -o test
作用:将test1.c和test2.c分别编译后链接成test可执行文件。
2.分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc-c test1.c //将test1.c编译成testfun1.o
#gcc-c test2.c //将test2.c编译成test2.o
#gcc-o test1.o test2.o -o test //将test1.o和test2.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。

二、调试工具—->gdb

简介:

gdb是gnu开源组织发布的一个强大的Unix下的程序调试工具。

gdb常用命令及描述:

backtrace(或bt): 查看各级函数调用及参数
finish :连续运行到当前函数返回为止,然后停下来等待命令
frame(或f) 帧编号: 选择栈帧
info(或i) locals: 查看当前栈帧局部变量的值
list(或l): 列出源代码,接着上次的位置往下列,每次列10行
list 行号: 列出从第几行开始的源代码
list 函数名: 列出某个函数的源代码
next(或n):执行下一行语句
print(或p):打印表达式的值,通过表达式可以修改变量的值或者调用函数
quit(或q):退出gdb调试环境
set var:修改变量的值
start:开始执行程序,停在main函数第一行语句前面等待命令
step(或s):执行下一行语句,如果有函数调用则进入到函数中

猜你喜欢

转载自blog.csdn.net/zl_8577/article/details/78734049