2014025641(15)《嵌入式系统程序设计》第二周学习总结
《嵌入式系统程序设计》第二周学习总结#
本周对gcc,gdb,makefile的复习,加深了对这几个命令的理解和应用。
一、有关gcc的知识点###
1.首先要了解gcc编译流程,其分为4个步骤:
(1)预处理阶段 gcc -E hello.c -o hello.i
(2)编译阶段 gcc -S hello.i -o hello.s
(3)汇编阶段 gcc -c hello.s -o hello.o
(4)链接阶段 gcc hello.o -o hello
最后生成可执行文件hello ,用./hello 来实现。
预处理干了什么?
预处理是根据以字符#开头的命令去修改原始的C程序。如一般的hello.c中的#include <stdio.h>指令告诉预处理器读系统头文件stdio.h的内容,并把它直接插入到程序文本中去。结果得到一个C程序,通常是以.i作为文件作为扩展名。
编译干了什么?
编译阶段首先要检查这段代码是否有语法错误、代码的规范性等,以确定代码的正确性,若没有错误,gcc把代码编译成汇编代码。
汇编干了什么?
汇编把编译阶段生成的.s为后缀的文件转化成目标文件,生成的是的二进制目标代码,我们应该是没法看得懂,只有电脑能看的明白吧。
链接干了什么?
生成可执行文件。(涉及到函数库的知识点之后讲解)
2.gcc中的函数库(动态库和静态库)
(1).了解库的概念
现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始。尽量不重复做别人已经做过的事,就是尽量充分利用别人的劳动成果。就是“站在巨人的肩膀上”做事情。个人理解这个就跟java中的封装有异曲同工之处吧。
(1).库的种类
分为静态库和动态库
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
动态库代码是在可执行程序运行时才载入,在编译过程中仅简单的引用,因此代码体积较小。
判断是否为动态库的指令是 file命令,判断文件类型,简洁明了。
静态库是以.a后缀的。 ar -rc libhello.a hello.o
动态库是以.so后缀的。 gcc -fpic -shared -s hello.c -o libhello.so
二、有关gdb的知识点###
1.有关gdb的操作
(1)启动gdb
gdb hello(hello为可执行文件)
(2)执行
当我们进入之后输入run来执行这个文件

就是这种感觉,上图说话。
(3)其他命令
(gdb) list 显示执行.c文件的整个代码。

b n (n是数量)打断点,在执行run之后会停留在第n行,输入s继续执行,退出c ,整体退出q。
三、makefile的知识点###
1.makefile的作用
makefile关系到了整个工程的编译规则。我们现在实验的是几个文件,可以用gcc一个一个连续编程,但是如果在实际的项目中,很多文件会不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,都由makefile来管理,而且十分方便。写完之后,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。
2.makefile的一些替换符号
OBJS1 := hello.o在这个makefile文件中所有的 hello.o可以用@OBJS来替换操作了
CC:gcc这也是一个替换操作。
Makefile有三个非常有用的变量,分别是$@,$^,$<代表的意义分别是:
(1)$@ 目标文件。
(2)$^ 所有的依赖文件。
(2)$< 第一个依赖文件。
注意如下图

在执行gcc命令的时候要按一下<tab>健来执行。如果直接enter的话会报错的。
执行makefile的语句是 make 也可以执行其他的不是以makefile命名的文件,但是没有意义的操作,直接命名 makefile, make操作就会自动找到的
四、实验楼的实验成果###
对gcc的实验,编写.h文件和.c文件

执行效果是如上图所示。
对静态库的操作练习如下图:

对gdb锻炼操作的练习:

对makefile简单的练习:

本周总结###
(纯属自己的感想,不喜勿喷)
在实验楼中进行了实验,发现了一个问题,就是做实验的时候不认真,在动态库的练习中不仔细,遇到一些问题没有及时的保存整理,跟老师交流的时候没有底气。
后来反思并重新进行了实验,发现还是自己打的代码有些问题,出现了不应该的错误,希望下周学习能够认真仔细。
学习进度条###
| 代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
| 目标 | 5000行 | 9篇 | 180小时 | |
| 第一周 | 200/200 | 1/1 | 15/20 | 学习使用Vim、gcc操作 |
| 第二周 | 500/800 | 2/2 | 60/40 | 加深了gcc,gdb,makefile的认识。 |
| 第三周 | /1400 | /3 | /60 | |
| 第四周 | /2000 | /4 | /80 | |
| 第五周 | /2600 | /5 | /100 | |
| 第六周 | /3200 | /6 | /120 | |
| 第七周 | /3800 | /7 | /140 | |
| 第八周 | /4400 | /8 | /160 | |
| 第九周 | /5000 | /9 | /180 |
浙公网安备 33010602011771号