• 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

    代码托管连接

    代码托管连接

    感想:

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

  • 相关阅读:
    设置 tableview 的背景颜色,总是有蒙层
    设置 tableview 的背景颜色,总是不生效
    bug: 在使用HMSegmentedControl时,设置selectionIndicatorEdgeInsets对左右边界没有用
    心情烦闷annoying,贴几个图!唉!annoying
    [EffectiveC++]item28:避免返回handles指向对象内部成分
    Memorize and recite an important historical speech
    NCE3
    NCE2
    015 volatile关键字 线程函数的lParam 原子操作和旋转锁.
    015 原子操作 旋转锁
  • 原文地址:https://www.cnblogs.com/bestixx/p/7603494.html
Copyright © 2020-2023  润新知