• 20155227 第二周课堂实践


    20155227 第二周课堂实践

    第二周测试1-vi测试

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

    课上做的时候由于所在文件夹有一个hello.c文件,使用命令gcc *.c一直无法编译成功,删除后编译通过。

    第二周测试2-gcc测试

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

    gcc的编译流程

    • 预处理阶段:头文件和宏定义,—E可以让gcc在预处理结束之后停止编译过程,因此可以看到预处理的过程

    一般格式为:gcc [选项] 要编译的文件 [选项] 目标文件gcc -E hello.c -o hello.i

    • 编译阶段:gcc将代码翻译成汇编语言,使用选项-S只进行编译而不进行汇编,结果生成汇编代码。gcc -S hello.i -o hello.s
    • 汇编阶段:将.s文件转成目标文件,使用选项-c可以看到汇编代码转换为二进制目标代码。gcc -c hello.s -o hello.o
    • 链接阶段:默认搜索链接到libc.so.6函数库当中,调用库文件中已经实现的函数。
    • 运行:./hello

    gcc编译选项分析

    常用选项

    课堂实践截图

    第二周测试3-gdb测试

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

    GDB最基本的命令有:

    • gdb programm(启动GDB)
    • b 设断点(要会设4种断点:行断点、函数断点、条件断点、临时断点)
    • run 开始运行程序
    • bt 打印函数调用堆栈
    • p 查看变量值
    • c 从当前断点继续运行到下一个断点
    • n 单步运行
    • s 单步运行
    • quit 退出GDB

    其他:

    • display 跟踪变量值的改变
    • until 跳出循环
    • finish 跳出函数
    • help 帮助

    设置断点

    • 函数:b 文件名.c:函数名
    • 行:b 行数
    • 条件:b 行数 if 表达式(例如:b 9 if == 12)
    • 临时:tb [文件名:]行号或函数名 <条件表达式>

    课堂实践过程及截图

    gcc -g *.c -o main
    gdb main
    b main
    b 11 if i==2600
    info break
    r
    q
    

    第二周测试4-静态库的测试

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

    静态库

    静态库是一系列的目标文件(.o文件)的归档文件((lib+name).a文件);链接阶段,选择静态库,后缀名为“.a”,选择动态库,后缀名为“.so”。

    静态链接库的生成:gcc -c 文件名.c ar rcsv libxxx.a xxx.o
    静态库的使用:gcc -o 文件名 文件名.c -L. -lxxx

    课堂实践过程及截图

    ar cr math.a add.o sub.o mul.o div.o
    gcc main.c ./math.a -o main

    ar rcs mymath.a add.o sub.o div.o mul.o
    gcc -o main main.o ./mymath.a
    ./main
    

    第二周测试5-共享库

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

    动态库

    共享库的生成:gcc -fPIC -c xxx.c gcc -shared -o libxxx.so xxx.o

    共享库的使用:gcc -o main main.c -L. -lxxx

    课堂实践过程及截图

    生成:
    gcc -fPIC -c add.c sub.c mul.c div.c
    gcc -shared -o libmymath.so add.o sub.o mul.o div.o

    使用:gcc -o main main.c -L. -lmymath

    gcc -shared -fpic -o libmymath.so add.c div.c mul.c sub.c
    
    gcc -o 20155227 main.c ./libmymath.so
    

    第二周测试6-Makefile

    1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.

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

    Makefile

    • 一个工程中的源文件不计其数,按其类型、功能、模块分别放在若干个目录中。makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至进行更复杂的功能操作。其带来的好处就是——“自动化编译”,一但写好,只需要一个make命令,整个工程完全编译,极大的提高了软件的开发效率。

    • makefile文件编写规则:

      • 目标文件:由make创建,通常是目标文件或可执行文件
      • 依赖文件:创建目标体所依赖的文件
      • 运行命令:创建每个目标体时需要的运行命令,必须以tab键开头
      • 格式为:目标文件:依赖文件列表 [tab键]各目标体运行命令(注意不是空格)
      • 使用make的格式:make 目标文件

    课堂实践过程及截图

    • 输入vim Makefile,输入i进入编辑模式,输入代码并保存

      编写的Makefile文件内容:

      1 testmymath: main.o add.o sub.o mul.o div.o 
      2     gcc main.o add.o sub.o mul.o div.o -o testmymath
      3 main.o: main.c head.h
      4     gcc -c main.c
      5 add.o: add.c head.h
      6     gcc -c add.c
      7 sub.o: sub.c head.h
      8     gcc -c sub.c
      9 mul.o: mul.c head.h
     10     gcc -c mul.c
     11 div.o: div.c head.h
     12     gcc -c div.c       
           
    
    • 输入 make ,进行自动化编译
    • 执行 ./testmymath 查看结果

    myod

    1. 复习c文件处理内容

    2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能

    3. main与其他分开,制作静态库和动态库

    4. 编写Makefile

    5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息

    实现od -tc -tx1 XXX命令,-tc表示输出ASCII字符,-tx1表示以十六进制输出,每组输出一字节。

    静态库

    动态库

    Makefile

    参考资料

    link

  • 相关阅读:
    浅谈python中selenium库调动webdriver驱动浏览器的实现原理
    浅谈python面向对象编程和面向过程编程的区别
    python中可变与不可变类型的全局变量
    冒泡排序和sort,sorted排序函数
    浅谈python之利用pandas和openpyxl读取excel数据
    configparser读取配置文件时的相对路径问题
    关于网站登录后的页面操作所携带的不同cookie值
    【转】Cookie和Session和Cache
    python输出九九乘法表
    win10系统使用小技巧【转】
  • 原文地址:https://www.cnblogs.com/guyanlin/p/7603607.html
Copyright © 2020-2023  润新知