2019-2020-1 20175320 《信息安全系统设计基础》第三周学习总结
2019-2020-1 20175320 《信息安全系统设计基础》第一周学习总结
一、教材学习内容总结
本周我们了解并练习了gcc的使用,并在此基础上进行gdb以及makefile的使用。围绕gcc,本周的内容可以分为以下几部分:利用gcc的-E、-S、-c这三个参数对c文件进行逐步编译;将c文件中的函数转化为函数库,并对库函数进行调用;使用makefile对程序进行自动编译;使用gdb调试程序。在本博客中我使用了老师提供的main.c程序作为例子,下图为程序代码。

使用gcc的-E、-S、-c这三个参数对c文件进行逐步编译
- 此处需要注意的是,这三个参数的大小写不可随意更改,且有这些参数的命令不能同时对多个文件进行操作。
![]()
- 若进行操作的文件不在当前目录,可以在文件名前加上文件路径。
- 多模块操作时,可以将多个c文件直接编译成可执行文件,也可将c文件先编译成.o文件,再将.o文件进行链接。
- 在进行编译的过程中,warning提示是可以忽略的,并不影响过程的进行。
该部分的部分过程以及运行结果如下图:
![]()
将c文件中的函数转化为函数库,并对库函数进行调用
- 静态库与动态库的生成过程十分相似,都是先编译并汇编得到所调用函数的可重定位目标程序,然后通过命令基于这些文件生成库文件,最后在编译主程序的过程时通过-L以及-l参数将主程序与函数库链接起来
- 当进行操作的文件不在当前目录时,可以在文件前添加路径来找到文件。
该部分的部分过程以及运行结果如下图:
静态库:
![]()
动态库:
![]()
使用makefile对程序进行自动编译
- 编写好makefile文件后,可以使用make命令对文件进行自动编译,makefile代码中进行操作的文件如果不在makefile文件所在的目录,需要在文件名前添加文件路径
本例的makefile代码如图:
![]()
makefile的运行结果如下:
![]()
本例的文件结构如下图:
![]()
使用gdb调试程序
- 在使用gdb进行调试时,需要使用-g参数对c文件进行编译
在这里我仍然使用main.c作为例子,gdb各命令的结果如下图所示:
gdb编译:
![]()
gdb list命令:
![]()
gdb info查看断点:
![]()
gdb next命令:
![]()
二、教材学习中的问题和解决过程
这周的内容并不困难,没有遇到十分难以解决的问题。
三、代码调试中的问题和解决过程
- 问题1:按照ppt编写makefile文件,运行时显示找不到文件。
- 问题1解决方案:修改makefile代码,在操作文件名前添加文件路径。
![]()
- 问题2:gdb调试时使用step命令无法进行数据输入。
- 问题2解决方案:使用next命令调试程序。
四、代码托管

五、上周考试错题总结
- 上周无测试。
六、其他(感悟、思考等,可选)
在本周的内容中,我了解了多种编译的方式,直接编译、生成库函数、编写makefile代码。而碰到的问题绝大多数都与文件路径有关,这提示我在日常的电脑使用中一定要注意文件的路径,注意不要随意更改一个文件的位置。
七、学习进度条
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
|---|---|---|---|---|
| 目标 | 3000行 | 25篇 | 300小时 | |
| 第一周 | 54/54 | 1/1 | 13/13 |
尝试一下记录「计划学习时间」和「实际学习时间」,到期末看看能不能改进自己的计划能力。这个工作学习中很重要,也很有用。 耗时估计的公式 :Y=X+X/N ,Y=X-X/N,训练次数多了,X、Y就接近了。
- 计划学习时间:XX小时
- 实际学习时间:XX小时
- 改进情况:
(有空多看看现代软件工程 课件 软件工程师能力自我评价表)












浙公网安备 33010602011771号