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码字符或者是转义字符

代码运行结果

经老师提醒,需要能读取多个文件

修改后如图

静态库

动态库

参考文献

posted @ 2017-10-01 22:05  Fer_佳  阅读(316)  评论(3编辑  收藏  举报