苏嵌工程实践实训-嵌入式 linuxC 第 4天

项目开发日报表

项目名称 【苏嵌实训-嵌入式 linux C 第4天】
今日进度以及任务 学习了gcc编译器 ,了解了编译器编译过程(预处理,编译,汇编,链接)学会静态库与动态库的制作与使用
本日任务完成情况 (详细说明本日任务是否按 计划完成,开发的代码量) 本日任务按计划完成,动手编写制作了静态库和动态库,编写了Makefile文件,
本日开发中出现的问题汇总 CMakeLists.txt使用仍不是很熟练
本日未解决问题
本日开发收获 掌握了编译器编译的过程,学会静态库与动态库的制作与使用 ,熟悉了Cmake的用法
其他

1. 编译器三级优化分别优化了哪些?

  • O1对程序做部分编译优化,对于大函数,优化编译占用稍微多的时间和相当大的内存。使用本项优化,编译器会尝试减小生成代码的尺寸,以及缩短执行时间,但并不执行需要占用大量编译时间的优化。

  • O2是比O1更高级的选项,进行更多的优化。Gcc将执行几乎所有的不包含时间和空间折中的优化。当设置O2选项时,编译器并不进行循环打开()loop unrolling以及函数内联。与O1比较而言,O2优化增加了编译时间的基础上,提高了生成代码的执行效率。

  • O3在O2的基础上进行更多的优化,例如使用伪寄存器网络,普通函数的内联,以及针对循环的更多优化。

2. 总结gcc静态库和动态库的制作;
静态库的创建:
创建:
gcc-c源文件.c
ar rcs静态库名 目标文件1目标文件2
rc:静态库不存在,就创建该库文件s:更新库文件

静态库的使用:
静态库创建成功后,然后对全局变量和函数进行声明,在编译的时候加上库文件就行!
gcc-o file flie.c-L.-Iname

动态库的创建:
gcc-shared-fPIC-o库名.so源文件.c
动态库的使用:
gcc源文件c./库名.s0-0可执行文件名

3. 总结CMake用法

(1)demo1单个源文件

  • hello.c
    苏嵌工程实践实训-嵌入式 linuxC 第 4天
  • CMakeLists.txt
    第一行用于指定cmake最低版本
    第二行指定项目名称(这个名称是任意的)
    第三行指定编译一个可执行文件,hello是第一个参数,表示生成可执行文件的文件名(这个文件名也是任意的),第二个参数hello.c则用于指定源文件。
    苏嵌工程实践实训-嵌入式 linuxC 第 4天
  • 第一步,用cmake生成Makefile文件
    苏嵌工程实践实训-嵌入式 linuxC 第 4天
  • 第二步,make编译程序 && 编译成功
    通过上一步我们发现,当前目录下已经多出了几个文件,特别是Makefile文件,并测试程序,成功输出hello world 。第一个用cmake管理的程序,成功了!
    苏嵌工程实践实训-嵌入式 linuxC 第 4天

(2)demo2 同一目录 多个文件
苏嵌工程实践实训-嵌入式 linuxC 第 4天
苏嵌工程实践实训-嵌入式 linuxC 第 4天

  • CMakeLists.txt
    苏嵌工程实践实训-嵌入式 linuxC 第 4天
  • 用cmake生成Makefile文件
    苏嵌工程实践实训-嵌入式 linuxC 第 4天
  • make编译程序 并运行
    苏嵌工程实践实训-嵌入式 linuxC 第 4天
    (3)demo3 多个目录 多个源文件
    苏嵌工程实践实训-嵌入式 linuxC 第 4天
    苏嵌工程实践实训-嵌入式 linuxC 第 4天