zoukankan      html  css  js  c++  java
  • 20155222 第二周测试

    20155222 第二周测试

    • 1 vi

      1. 每个.c一个文件,每个.h一个文件,文件名中最好有自己的学号
      2. 用Vi输入图中代码,并用gcc编译通过
      3. 在Vi中使用K查找printf的帮助文档
      4. 提交vi编辑过程截图,要全屏,包含自己的学号信息

      遇到问题:
      1.头文件的命名中不能带有下划线
      2.gcc -c 命令中的c必须是小写

    • 2 gcc测试

      1. 用gcc 进行预处理,编译,汇编,链接vi输入的代码
      2. 生成的可执行文件中要有自己的学号
      3. 提交预处理,编译,汇编,链接,运行过程截图,要全屏,包含自己的学号信息

      遇到问题:将main.o文件链接为可执行文件必须同时链接其依赖的add.o、sub.o、mul.o、div.o文件

    • 3 gdb测试

      1. 用gcc -g编译vi输入的代码
      2. 在main函数中设置一个行断点
      3. 在main函数增加一个空循环,循环次数为自己学号后4位,设置一个约为学号一半的条件断点
      4. 提交调试过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

      附gdb调试指令:
      l -- l命令相当于list,从第一行开始例出原码
      回车 -- 直接回车表示,重复上一次命令
      break n -- 设置断点,在源程序第n行处
      break func -- 设置断点,在函数func()入口处
      info break -- 查看断点信息
      r -- 运行程序,run命令简写
      n -- 单条语句执行,next命令简写
      c -- 继续运行程序,continue命令简写
      p i -- 打印变量i的值,print命令简写
      bt -- 查看函数堆栈
      finish -- 退出函数
      q -- 退出gdb

    • 4 静态库的测试

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

      静态库是一些目标文件(后缀名为.o)的集合体。
      静态库的后缀名是.a,对应于windows操作系统的后缀名为.lib的静态库。
      可以使用ar命令来创建一个静态库文件。

    gcc -c add.c -o add.o
    gcc -c sub.c -o sub.o
    gcc -c mul.c -o mul.o
    gcc -c div.c -o div.o
    ar rcs libmymath.a add.o sub.o mul.o div.o 
    

    会在当前目录下生成一个libtest.a静态库文件。-c表示只编译,不链接。再敲入以下命令进行链接

    gcc –c main.c -o main.o
    gcc  -c static -o mymath_test main.o ./libmymath.a
    
    • 5 共享库的测试
    1. 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
    2. 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息

      由于动态链接库函数的共享特性,它们不会被拷贝到可执行文件中。在编译的时候,编译器只会做一些函数名之类的检查。在程序运行的时候,被调用的动态链接库函数被安置在内存的某个地方,所有调用它的程序将指向这个代码段。因此,这些代码必须实用相对地址,而不是绝对地址。在编译的时候,我们需要告诉编译器,这些对象文件是用来做动态链接库的,所以要用地址不无关代码(Position Independent Code (PIC))。
      对gcc编译器,只需添加上 -fPIC 标签
    gcc -shared -fPIC -o libmymath2.so add.c sub.c mul.c div.c
    gcc -o mymath_test2 main.c ./libmymath2.so
    
    • 6
      1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.

      2 提交Make过程截图,要全屏,包含自己的学号信息

      Makefile的规则 :
      在讲述这个Makefile之前,还是让我们先来粗略地看一看Makefile的规则。
      target ... : prerequisites ...
      command
      ...
      ...
      target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label),对于标签这种特性,在后续的“伪目标”章节中会有叙述。
      prerequisites就是,要生成那个target所需要的文件或是目标。
      command也就是make需要执行的命令。(任意的Shell命令)
      这是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。

      遇到问题:mymath中命令行必须以Tab开头
      main.c的编译不需要依赖HEAD.H??

  • 相关阅读:
    博客园转载别人的文章的方法
    CSS属性:定位属性(图文详解)
    深入学习css伪类和伪元素及其用法
    CSS3:RGBA的使用方法
    display和visibility,(height: 0; overflow: hidden;)区别
    css居中div的几种常用方法
    高性能RTMP、RTSP、HLS(m3u8)、HTTPFLV流媒体服务器EasyNVR、EasyDSS、EasyGBS系列产品版本信息中获取的ip是否可以更改?
    EasyDSS高性能RTMP、HLS(m3u8)、HTTPFLV流媒体服务器问题之选定时间段录像进行观看会出现“视频播放等待”字样的问题解析
    RTSP、RTMP、HLS、HTTPFLV,Easy系列的流媒体服务核心产品EasyDSS_kernel在使用hls拉流提示跨域问题是什么原因造成的?
    EasyDSS高性能RTMP、HLS(m3u8)、HTTPFLV、RTSP流媒体服务器解决方案之EasyDSS版本免费更新的方法
  • 原文地址:https://www.cnblogs.com/20155222lzj/p/7616219.html
Copyright © 2011-2022 走看看