外观
02.嵌入式 C 语言编译器
约 727 字大约 2 分钟
嵌入式Linux单片机个人
2022-06-17
五、嵌入式 C 语言编译器
1. GCC与gcc有什么不同?
GCC ( GNU Compiler Collection )
- GNU编译器集合,包含众多语言的编译器
- C(gcc),C++(g++),Java, D, Objective-C, 等.
- GNU编译器集合,包含众多语言的编译器
gcc
- 特指GCC中的C语言编译器
2. GCC VS 嵌入式
多数嵌入式操作系统都基于GCC进行源码编译
- Linux, VxWorks, Android , 等.
实际开发中的使用
- 内核开发:gcc
- 应用开发:gcc / g++ / gdc
3. 什么是交叉编译?
背景
- 嵌入式设备往往资源受限
- 不可能在嵌入式上直接对处理器进行编程
解决方案
- 在开发主机(PC)上对源码进行编译
- 最终生成目标主机(嵌入式设备)的可执行程序
4. gcc是如何进行交叉编译的?
- 配置目标主机的编译工具链(如: arm-linux )
- 配置工具链的具体版本
- 根据具体的目标代码选择相应的工具链版本
- 正确使用关于硬件体系结构的特殊编译选项
5. 案例:大型企业嵌入式开发环境

6. 初识编译器

7. 你不知道的事。。。

8. 扩展问题:如何理解“多语言混合开发”?
9. 多语言混合开发方式一

语言 --> 语言
文本兼容
10. 行业案例: .net framework

11. 多语言混合开发方式二

dll:windows下动态链接库
语言 --> 二进制程序 --> 链接
二进制兼容
12. 行业案例:QQ

13. 多语言混合开发方式三

进程间通信
14. 行业案例:Eclipse

15. gcc关键编译选项一
预处理指令
- gcc -E file.c -o file.i
编译指令
- gcc -S file.i -o file.s
汇编指令
- gcc -c file.s -o file.o
16. gcc关键编译选项二
- 生成映射文件
- gcc -Wl,-Map=test.map file.c

全局变量的地址和函数的地址在编译之后就已经确定。
定义 宏定义
- gcc -D'TEST="test"' file.c

获取系统头文件路径
- gcc -v file.c
17. gcc关键编译选项三
- 生成依赖关系
获取目标的完整依赖关系
- gcc -M test.c
获取目标的部分依赖关系
- gcc -MM test.c
18. gcc关键编译选项四
- 指定库文件及库文件搜索路径
- -L 选项:指定库文件的搜索路径
- -I 选项:指定库文件
- gcc test.c -L. -Ifunc
- . 是当前目录
- gcc test.c -L. -Ifunc
