除了MyOD,其他实验均在openEuler系统下完成
使用vim编辑tree.c并编译
可以正常编译输出
src, include,bin, lib, docs, test文件夹
bin文件夹:放程序执行目录,.exe等存放的地方;
inc文件夹:.h头文件存放的地方;
src文件夹:.c文件存放的地方;
main.c文件为工程主函数程序执行文件。
安装tree:
可以显示出tree结构
加入学号这一认证信息
gcc的编译流程分为四个步骤,分别为:
· 预处理(Pre-Processing)
· 编译(Compiling)
· 汇编(Assembling)
· 链接(Linking)
以hello.c为例子,在这四个步骤中可以设置选项分别生成hello.i, hello.s, hello.o以及最终的hello文件:
hello.c : 最初的源代码文件;
hello.i : 经过编译预处理的源代码;
hello.s : 汇编处理后的汇编代码;
hello.o : 编译后的目标文件,即含有最终编译出的机器码,但它里面所引用的其他文件中函数的内存位置尚未定义。
hello / a.out : 最终的可执行文件
以tree.c文件为例
这个程序,一步到位的编译指令是:
gcc tree.c -o tree
gcc -E tree.c -o tree.i 或 gcc -E tree.c
可以输出文件中存放着test.c经预处理之后的代码。
gcc的-E选项,可以让编译器在预处理后停止,并输出预处理结果。在本例中,预处理结果就是将stdio.h 文件中的内容插入到tree.c中了。
预处理之后,可直接对生成的test.i文件编译,生成汇编代码:
gcc -S tree.i -o tree.s
gcc的-S选项,表示在程序编译期间,在生成汇编代码后,停止,-o输出汇编代码文件。
对于上一小节中生成的汇编代码文件test.s,gas汇编器负责将其编译为目标文件,如下:
gcc -c tree.s -o tree.o
gcc连接器是gas提供的,负责将程序的目标文件与所需的所有附加的目标文件连接起来,最终生成可执行文件。附加的目标文件包括静态连接库和动态连接库。
对于上一小节中生成的tree.o,将其与C标准输入输出库进行连接,最终生成程序test
gcc tree.o -o tree
运行验证:
程序函数库可分为3种类型:静态函数库(static libraries)、共享函数库(shared libraries)、动态加载函数库(dynamically loaded libraries):
1、静态函数库,是在程序执行前就加入到目标程序中去了 ;
2、动态函数库同共享函数库是一个东西(在linux上叫共享对象库, 文件后缀是.so ,windows上叫动态加载函数库, 文件后缀是.dll)
以选做MyOD为例
1、输入指令制作静态库
2、输入指令制作动态库
五、gdb相关练习
gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。
一般来说,GDB主要帮助你完成下面四个方面的功能:
1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。
2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)
3、当程序被停住时,可以检查此时你的程序中所发生的事。
4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。
编写一个简单的c程序并使用gdb调试
先安装gdb
用start命令开始执行程序:
在start命令后,每输入一个n就能够单步执行一条语句(输入一个命令后,直接回车表示最近输入命令的含义)。当程序执行完时,可以输入quit命令来退出gdb模式。
gdb a会进入a可执行程序的gdb模式
start命令就使程序准备运行程序中的第一条语句。
b 8是表示在此函数处设置一个断点,表示在程序第八行设置一个断点。
c表示继续运行程序,程序会在设置断点处停下来。
displayb表示将b的值显示出来(undisplay取消对变量的跟踪),然后再输入单步调试命令n(next)就可以使程序继续运行。
四种断点分类:
断点有助于快速跳过没有问题的代码,然后在有问题的代码上慢慢走慢慢分析,“断点加单步”是使用调试器的基本方法。至于应该在哪里设置断点,怎么知道哪些代码可以跳过,而哪些代码要慢慢走,也要通过对错误现象的分析和假设来确定,以前我们用printf打印中间结果时,也要分析应该在哪里插入printf,打印哪些中间结果,调试的基本思路是一样的。
也是基于MyOD
选做
1、vim编写makefile
2、安装make
3、测试makeflie
makefile测试正确
openEuler安装vmtool里面的细节
右击虚拟机,点击安装vmtool
这时,DVD会变成vmware镜像,把里面的压缩包复制到桌面,然后解压,如图
在终端中运行解压文件夹中的.pl文件(perl xxx.pl),一直按enter键,即可装好[如果不是root权限需加个sudo]
如果不放心有没有装好,可以从主机拖拽文件查看,如下图:
由此看见,vmtool已经成功装上了