项目开发日报表:
项目名称 | 苏嵌实训-嵌入式Linux 第2天 |
---|---|
今日进度及任务 | 学习开发工具 gcc,gdb,make的使用。 静态库,动态库的创建。 |
任务完成情况 | 课堂笔记已整理,课内题目已完成 |
开发时出现的问题 | 无 |
未解决的问题 | 课堂上学习时老师布置的题目完成的比较慢,需要课下再花时间多练习学习 |
开发收获 | 基本了解和使用开发工具: 编译器ggc,调试器gbd,工程管理器make。 学会创建基础的静态库和动态库 |
其他 | 无 |
课后作业:
1.编译器三级优化分别优化了哪些?
(1)代码调整 :
代码调整是一种局部的思维方式;基本上不触及算法层级;它面向的是代码,而不是问题; 所以:语句调整,用汇编重写、指令调整、换一种语言实现、换一个编译器、循环展开、参数传递优化等都属于这一级。
(2)新的视角 :
新的视角强调的重点是针对问题的算法;即选择和构造适合于问题的算法;(冒泡排序还是快排的选择问题是这一级早就应该完成的)很多经典算法都对问题作了一些假设(包括我们当前已经完成的算法实现),而在面对实际问题时“新的视角”提示我们应该重新检视这些假设,并尝试不同的思考问题的角度,寻求适合于问题的新算法;
(3)表驱动状态机 :
将问题抽象为另一种等价的数学模型或假想机器模型,比如构造出某种表驱动状态机;这一级其实是第二级的延伸,只是产生的效果更加明显,但它有其本身的特点(任何算法和优化活动都可以看作是他的投影);
2.总结gcc静态库和动态库的制作
假设需要完成这样一个项目:需要对整数进行加减乘除。
根据已学知识,我们让add.c,sub.c文件分别包含加减函数,分开实现加法运算和减法运算。
add.c
sub.c
在main.c主程序中调用加法函数和减法函数进行运算
#include"stdio.h"
#include"add.h"
#include"sub.h"
int main()
{
int m,n;
printf("请顺序输入两个数字:");
scanf("%d %d",&m,&n);
printf("%d+%d=%d\n",m,n,add(m,n));
printf("%d-%d=%d\n",m,n,sub(m,n));
}
编译运行项目,直接使用gcc命令完成。
合并静态库
![合并静态库](https://img-blog.csdnimg.cn/20200706221930659.PNG?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L1JhaW5fMDAwMA==,size_16,color_FFFFFF,t_70
合并动态库
3.总结CMake用法
以输出Hello World 为例展示CMAKE的用法:
main.c
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200706223908844.PNG
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project (demo)
add_executable(main main.c)
第一行:表示要求CMAKE最低版本是2.8
第二行:表示工程名为demo
第三行:第一个main指生成的elf文件名
第二个main指源文件为main.c
在终端下切换到main.c的目录,输入命令:
cmake.
输入make
生成的Makefile显示进度100%,并且有颜色。
测试程序
成功!