20155229付钰涵 第二周课堂实践
20155229付钰涵 第二周课堂实践
第二周测试3-gdb测试
(老师)建议:在使用jdb时,用打开三个标签:1、用于vi;2、用于编写代码;3、用于调试代码
(由于还未习惯这种做法,所以我的调试还是用一个标签。)
1. 用gcc -g编译vi输入的代码
- 先输入
gcc -g *.c -o xxx
对输入的代码进行编译,再输入gdb xxx
进入该代码的调试阶段。
2. 在main函数中设置一个行断点
①、输入l(list)
显示出整段代码②、设置断点,用b(break)
,如图,先对第6行和第8 行设置断点
③、输入r(run)
运行
④、输入n(next)
执行下一行
3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
增加空循环
运行到断点时,设置b if i==2614
接着用n执行下一步
第二周测试4-静态库的测试
1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
参考 c语言生成动态库
静态库文件的命名是以lib为前缀,紧跟静态库名,扩展名为.a,创建静态库用ar
命令。
gcc -c add.c sub.c mul.c div.c
ar rcsv libmymath.a add.o sub.o mul.o div.o
在程序中使用静态库,在静态库前加上前缀lib,追加扩展名.a得到的静态库文件名来查找静态库文件。
gcc main.c -o main -L. -lmymath
第二周测试5-共享库
1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 创建共享库
-fpic表明创建position independengt code,
gcc -fPIC -c add.c sub.c mul.c div.c
gcc -shared -o libmymath.so add.o sub.o mul.o div.o
重新编译链接程序,通过-l 参数指定库路径gcc -o main main.c -L. -lmymath
创建好共享库后,将libmymath.so拷贝到lib或/usr/lib下
第二周测试6-Makefile
1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
- 首先
vim Makefile
进入 - 然后参考 makefile使用 写出makefile文件内容
testmymath: main.o add.o sub.o mul.o div.o
gcc main.o add.o sub.o mul.o div.o -o testmymath
main.o: main.c head.h
gcc -c main.c
add.o: add.c head.h
gcc -c add.c
sub.o: sub.c head.h
gcc -c sub.c
mul.o: mul.c head.h
gcc -c mul.c
div.o: div.c head.h
gcc -c div.c
保存后使用make
编译
在编译中一直出错,如图
上网查过后,发现所有命令前要输入tab
重新编译,还是出错,然后发现应该是用vim makefile
而不是vim Make file
,改正后的makefile成功。
Linux下实现od命令功能
实现od -tx tc XXX
od用于将指定文件内容以把进制、十进制、十六进制、浮点格式或Ascii编码字符方式显示
命令格式
od [<选项><参数>] [<文件名>]
命令示例
-
od -tx
为以十六进制输出,默认以四字节为一组(列)显示 -
od -tc
等价于-c
,选择ASCII码字符或者是转义字符
代码运行结果
经老师提醒,需要能读取多个文件
修改后如图