zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    Javascript FP-ramdajs
    微信小程序开发
    SPA for HTML5
    One Liners to Impress Your Friends
    Sass (Syntactically Awesome StyleSheets)
    iOS App Icon Template 5.0
    React Native Life Cycle and Communication
    Meteor framework
    RESTful Mongodb
    Server-sent Events
  • 原文地址:https://www.cnblogs.com/guyanlin/p/7603607.html
Copyright © 2011-2022 走看看