嵌入式入门

项目名称 【苏嵌实训-嵌入式linuxC第2天】
今日进度以及任务 今天学习了编译器-gcc;调试器-gdb;工程管理器make
本日任务完成情况 学会了编译器的一些操作命令;如何用调试器去调试代码;工程管理器的应用
本日开发中出现的问题汇总 静态库和动态库的创建不是特别理解,不过可以听视频回放
本日未解决的问题 对make工程管理器运用不是很熟练
本日开发收获 一些基本概念及静态库动态库的创建
其他 自学了CMake

二、嵌入式Linux开发

1、交叉编译?为什么需要交叉编译?

  • 在当前CPU平台下编译出在其他CPU平台运行的可执行文件。
  • 每款CPU都有不同的汇编指令集;编译出的汇编文件只能在此CPU上运行。

2、源文件到可执行文件经理那几个步骤?每个步骤具体完成了哪些工作?
预处理、编译、汇编、链接

  • 预处理:做所有带#号的工作 例如:gcc -E hello.c > hello.i
    (1)头文件展开
    (2)宏编译
    (3)条件编译

《#include<stdio.h>VS#include"stdio.h"》
头文件的搜索路径不同:<>:仅在系统的头文件目录搜索
“”先在当前目录查找,找不到再到系统的头文件目录查找

  • 编译:gcc -S 将预处理文件编译成汇编文件,语法检查、词法分析.s
  • 汇编:gcc -c 将汇编文件编译生成目标文件.o
  • 链接:将目标文件编译生成可执行文件(符号表的建立).exe;(可以用-o给可执行文件重起名字)

gcc -w 关警告
gcc -Wall 开警告

3、编译器三级优化分别优化了哪些?
编译器优化:-O -O2 -O3

vim computer.c
gcc computer.c -o computer
time ./comuter

gcc -o1 computer.c -o computer1
time ./computer1

gcc -o2 computer.c -ocomputer2
time ./computer2

gcc -o3 computer.c -ocomputer3
time ./computer3

  • 第一级别优化了:代码调整,提供基础级别的优化

  • 第二级别优化了:提供更加高级的代码优化,会占用更长的编译时间

  • 第三级别优化了:提供最高级的代码优化

4、库文件的作用?什么是静态库和动态库?使用静态库和使用动态库生成的可执行文件的区别或优缺点?

  • 库仓库,保存函数和变量,只能使用不能看到其实现
  • 静态库.a:将需要的函数或者变量在编译时从静态库加载到源文件;动态库.so:在运行时加载,需要什么搬迁什么在什么时候加载
  • 大小:静态库生成的代码大于动态库生成的代码 内存效率很低
    速度:静态库优于动态库,节省运行时间
    编译速度:静态库小于动态库
    升级方便程度:动态库比较容易升级
    程序的部署方便程度:静态库>动态库

5、总结gcc静态库和动态库的制作;

  • 静态库制作!
    在这里插入图片描述
  • 动态库的制作!
    在这里插入图片描述

6、总结CMake用法;

  • CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。
  • 通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。
  • 只要在CMakeLists.txt中简单配置,就可以完成很多复杂的功能。

7、调试器-gdb用法 run 运行 list显示源码 gdb demo --tui break 17 next print info break delete 1(num) layout asm layout src layout split break 17 if i=10 break func step单步执行可以进到函数里面去 continue