一、嵌入式编译器
在认识库之前,我们要先了解gcc编译器,它是嵌入式编译器的一种
gcc命令的使用格式:gcc 【选项】 【文件名】 【选项】 【文件名】
gcc编译的过程,分为四个阶段:
- 预处理:将头文件进行展开,同时对宏定义进行转换
- 编译:进行语法,词法,语义分析即检查输入语句是否有错误,而后将语言转换为汇编语言。
- 汇编:将汇编语言译为CPU可识别的二进制文件。
- 链接:把程序中所以的目标文件和所需库文件链接到一起,最终生成一个可直接运行的文件,称为可执行文件。
总体选项:
-E 对源文件进行预处理,生成*.i文件
-S 对源文件进行编译,生成*.s文件
-c 对源文件进行编译或汇编,生成*.o文件
-o file 输出目标文件
-v 显示编译阶段的命令
警告选项:
-W 屏蔽所以的警告类型
-Wall:显示所以的警告类型
调试选项:
-g 产生调试信息
优化选项:
-o1:对目标文件进的性能进行优化
-o2:在-o1的基础上进行进一步优化,提高目标文件运行性能
-o3:在-o2的基础上进行进一步优化,支持函数集成优化
-o0:不进行优化
二、库的简介
从逻辑功能来看,程序的主体是由一系列函数组成的,所以编写程序的主要工作之一就是实现函数。
库一共分为两种,分别是静态库和动态库
静态库:在编译阶段加载
动态库:在执行阶段加载
- 使用静态库编译出的文件大小>动态库编译的文件
- 使用静态库编译出的文件执行速度>使用动态库文件的执行速度(动态库有一个调用的过程,所以会更慢)
- 动态库更方便更新升级,因为当需要升级时动态库只需要更改动态库里的文件,而静态库需要先删除,之后重新更改静态库,然后再编入程序才能升级成功
- 程序的部署静态库要优于动态库 (调用更方便)
- 库文件的存放路径(/lib)
- 动态库的建立
- gcc -shared(做动态库的选项) *.c -o *.so(.so是动态库的后缀)
- gcc main.c ./*.so -o main (将动态库编入main文件中,其实总体看也就是将*.c文件编入main.c文件中)
- 静态库的建立
1、gcc -c *.c -o *.o(编写静态库需要先将文件转换为二进制文件即.o文件)
2、ar rcs lib*.a *.o (rc:表示创建 s:表示更新 lib为生成静态库所需的文件前缀 .a为文件后缀)
3、gcc main.c -o main -L. -l* (-L.为指定加载的库的路径,-l*指定加载哪个静态库,-l后面加的是静态库名。)