15欧小诗

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

posted on 2017-05-01 18:37  欧小诗  阅读(137)  评论(0)    收藏  举报

导航