20155334 9月27日课堂检测补交

9月27日课堂检测补交

今天的课堂检测一共有五项,分别是vi测试、gcc测试、gdb测试、静态库的测试、共享库的测试。由于自己的学习不到位,导致有最后两个没有完成,特别在此加以补做。
对之前完成的三个检测,我学到了一些新知识:

gcc *.c :将当前文件夹里的所有.c 文件进行整体编译,编译后的文件名默认为a.out

1. 静态库测试:

1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
2. 提交静态库生成和调用过程截图,要全屏,包含自己的学号信息

解决方案:

Step 1:创建静态库:

在参考教材的第476页对实现静态库这样的两行命令:

linux> gcc -c addvec.c multvec.c
linux> ar rcs  libvector.a addvec.o multvec.o

对这两行命令的理解我也是通过SCDN博客中一篇名为《Linux命令之ar - 创建静态库.a文件》中找到了比较详尽的解释:

  1. 使用 gcc -c ···.c ···.c ···.c 把要将创建的静态库所包含的.c文件编译为.o文件。
  2. 使用 ar rcs ···.a ···.o ···.o ···.o 由以上编译出来的.o文件创建静态库。(在我自己的操作中根据题意命名为mymath)

Step 2 :创建可执行文件(即在在程序中使用静态库)

因为是静态编译,生成的执行文件可以独立于.a文件运行。

gcc -c main.c
gcc -static -o ··· main.o ./···.a

通过以上的两行命令将创建的.a文件链接到main.o上,创建出一个可直接运行的文件(在我自己的操作中命名为prog4c)

自己动手操作后的结果:

Step 1:

Step 2:

2. 动态库测试:

1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
2.  提交共享库生成和调用过程截图,要全屏,包含自己的学号信息

解决方案:

Step 1:创建动态库:

在参考教材的第486页对实现动态库这样的一行命令:

linux> gcc -shared -fpic -o libvector.so addvec.c multvec.c

对这行命令的理解:使用 gcc -shared -fpic -o ···.so ···.c ···.c 创建了一个共享的目标文件

Step 2 :创建可执行文件(即在在程序中使用动态库)

linux> gcc -o prog21 main2.c ./libvector.so

使用 gcc -o ··· main.c ./··· 创建了一个可执行的文件(在我自己的操作中命名为prog4s)

自己动手操作后的结果:

Step 1:

Step 2:

MakeFile

对于MakeFile我的脑海中可以说是一片空白,什么都不知道,多亏我们生长在一个技术发达、知识大爆炸的年代,通过查询ruglcc的博客我知道了
第一:Makefile的

makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

第二:我们要写一个Makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:

1.如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。
2.如果这个工程的某几个C文件被修改,那么我们只编译被修改的C文件,并链接目标程序。
3.如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并链接目标程序。

流程:

  1. 利用vim编写Makefile:
  2. 使用make将编写好的文件进行编译
  3. 运行编译好的文件(5334test)

Myod

代码托管连接

代码托管连接

感想:

通过这次的补交作业让我真真切切的体会到了实践出真知的道理,面对之前毫无头绪的问题,怨天尤人是无济于事的,只有脚踏实地的去一步一步的操作,一点点的查漏补缺才能真正的掌握它。

posted @ 2017-09-27 21:55  T_T>_<20155334  阅读(220)  评论(2编辑  收藏  举报