2018-2019-1 20165209 《信息安全系统设计基础》第1周学习总结

2018-2019-1 20165209 《信息安全系统设计基础》第1周学习总结

教材学习内容总结

  • gcc把源程序翻译成可执行文件的四个阶段
    • 预处理gcc -E hello.c -o hello.i
    • 编译gcc -S hello.i -o hello.s
    • 汇编gcc -c hello.s -o hello.o
    • 链接gcc hello.o -o hello

巧记:gcc -E/S/c hello.c -o hello.i/s/o

注:一起编译可采用gcc test1.c test2.c -o test或者gcc *.c -o test

  • 常用gcc 命令
选项 文件名
-E 仅执行编译预处理
-S 将.c文件转换成汇编文件
-c 仅编译,不连接
-o 指定生成输出文件
-I 指定头文件目录
-L 指定库文件所在的目录名
-l 制定程序要的链接的库
  • -I的使用: 当使用.h文件时,需要在hello.c加入#include "hello.h",保证声明和源文件相同。编译时gcc -I include(头文件所在文件夹) src/*.c -o bin/hello
  • 目录结构
    • src:存放.c文件
    • bin:存放调试后可执行文件
    • include:存放.h文件(头文件)
    • libs:存放动态库和静态库
    • Readme.md:阅读指南文件、使用指南
    • makefile:描述工程编译、链接功能
  • 静态库(libxxx.a)
    • 编译:gcc -c -I/头文件所在路径 add.c sub.c mul.c div.c生成.o文件,ar rcvs libmath.a add.o sub.o mul.o div.o生成静待库,gcc main.c -o main -I/头文件所在路径 -L. -lmath生成可执行文件
    • 优点:变异后执行程序不需要外部函数库支持
    • 缺点:一旦静态库改变,必须重新编译,编译成文件大。
  • 动态库(libxxx.so)
    • 编译:gcc -fpic -c -I/头文件所在路径 add.c sub.c mul.c div.c生成.o文件,gcc -shared -o libmath.so add.o sub.o mul.o div.o生成动态库,将libmath.so复制到目录/usr/lib中再输入gcc main.c -o main -I/头文件所在路径 -L. -lmath生成可执行文件。
    • 优点:可执行文件小,升级方便
    • 缺点:程序运行环境中必须提供相应的库。

代码调试中的问题和解决过程

  • 问题1:无法将物理机上的东西复制到虚拟机中
  • 问题1解决方案:点击设备共享剪贴板,选择双向
  • 问题2:编译出现“对main未定义的引用”
  • 问题2解决方案:使用头文件进行编译时gcc -I include src/*.c -o bin/main
  • 问题3:生成动态库后,移动文件后无法生成可执行文件
  • 问题3解决方案:在生成动态库后,输入gcc -o test main.c ./mymath.so,再输入./test即可运行。

代码托管

其他(感悟、思考)

通过蓝墨云上老师的6个测试,才感受到代码的知识并不是光靠着教学视频、老师上课讲授、整理的笔记就能解决的。而是需要花费时间,进行自我实践。在实践过程中遇到问题并解决问题,才能真正理解知识本身,并记住掌握。

学习进度条

代码行数(新增/累积) 博客量(新增/累积) 学习时间(新增/累积) 重要成长
目标 5000行 30篇 400小时
第一周 200/200 2/2 20/20
  • 计划学习时间:5小时

  • 实际学习时间:8小时

参考资料

猜你喜欢

转载自www.cnblogs.com/tutu233/p/9694298.html