想来想去还是重新学习下linux下面的基本操作吧,就当做是熟悉指令了。
把国嵌的实验重新做一遍,虽然之前有做过,但是也没有做什么记录,所以自己现在感觉有点没谱,所以从gcc开始:
一、编写一应用程序,使用gcc进行编译,并分别使用-o,-g,-static,-O2选项
1_1.c
1_2.c
1、 执行指令 gcc 1_1.c 1_2.c 默认生成 a.out可执行文件
2、 执行指令gcc 1_1.c 1_2.c –o a 则可以指定生成可执行文件的文件名a作用和1相同
3、 执行指令gcc - g 1_1.c 1_2.c –o a 则可以生成具有调试信息执行文件
4、 执行指令gcc –static 1_1.c 1_2.c -o b 则可以生成文件b 但是通过ls –l 指令可以发现a和b文件的大小是不一样的,如下所示:
所以后者绑定了库文件,是为静态库连接!
5、 执行指令 gcc –O 1_1.c 1_2.c 暂时没有发现有什么好处!
二、GDB程序的调试,编写一应用程序,使用gdb调试,调试中使用到该小节介绍的所有命令。编写测试程序如下1_1.c
1、 执行指令 gcc –g 1_1.c生成a.out文件,并且是带有调试信息的。
2、 执行指令gdb a.out进入调试状态!首先一个命令list(l)可以查看调试的程序。
3、 break(b) 函数名:表示在该函数入口打断点;break(b)行号:表示在该行处打断点
break(b) 文件名 行号(函数名):表示在指定的文件名指定的行号(函数)处打断点
4、 run(r):表示直接运行
5、 next(n):表示不进入子函数而单步执行下一步
6、 step(s):表示进入子函数而单步执行下一步
7、 continue(c):表示继续运行程序
8、 print(p) 变量名:表示查看当前变量的值
9、 watch 变量:对当前变量进行监控
11、quit(q):退出程序调试
12、start 开始运行到main函数
13、backtrace命令(简写为bt):可以查看函数调用的栈帧
14、finish 可以运行当前函数直到返回调用处
10、 GNU make的使用
编写三个程序如下
可以用命令行的方法进行编译,确实是实现了它的比较大小的功能
键入 vimmakefile
输入以下内容
几点重要的说明:
$<:代表第一个依赖文件
$@:代表当前目标
$^:代表所有依赖文件
Makefile中 #后面的内容表示注释
@表示取消回显
.PHONY表示声明一个伪目标