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小时