嵌入式C语言编译器:GCC
来源:互联网 发布:查重率软件 编辑:程序博客网 时间:2024/06/06 02:06
1 GCC相关介绍
GCC与gcc有什么不同?
- GCC(GNU Compiler Collection)
- GNU编译器集合,包含众多语言的编译器:C、C++、Java、D、Objective-C、etc
- gcc:特指GCC中的C语言编译器
GCC VS 嵌入式
- 多数嵌入式操作系统都基于GCC进行源码编译
- Linux、VxWorks、Android、etc
- 实际开发中的应用
- 内核开发:gcc
- 应用开发:gcc / g++ / gdc
2 初识编译器
- gcc将代码编译成可执行程序的过程会完成预处理(preprocessing)、编译(compilation)、汇编(assembly)、链接(linking)四个步骤
- 编译器由预处理器(cpp工具,C Preprocessor)、编译器(cc工具,C and C++ compiler)、汇编器(as工具,assembler)、连接器(ld工具)组成
3 gcc关键编译选项
3.1 预处理指令
3.1.1 指令格式
gcc -E file.c -o file.i
3.1.2 预处理文件相关内容
从file.i文件中我们可以看到存在大量的以“#”开头的行。每行的格式是“# 行号 文件名 标志“,其中的”行号“与”文件名“表示从它后一行开始的内容来源于哪一个文件的哪一行;标志可以是1、2、3和4四个数字,每个数字的含义如下:
当file.c使用到非系统头文件且它们不在当前目录下时,需要通过使用gcc的-I参数加以指定,否则gcc会因为无法获得必要的头文件进行宏展开而报错。
3.2 编译指令
3.2.1 指令格式
gcc -S file.i -o file.s
gcc -S -O2 file.c -o file.s
3.2.2 说明
使用-S参数时,我们可以根据需要使用-O选项。
3.3 汇编指令
3.3.1 指令格式
gcc -c file.s -o file.o
3.4 生成映射文件
3.4.1 指令格式
gcc -Wl,-Map=file.map file.c
3.4.2 说明
映射文件是通过ld链接器来生成的,我们可以通过映射文件了解一个程序文件中各符号在内存中的布局信息。gcc的-Wl选项用于指定传递给链接器的选项,-Map=file.map选项由gcc传递给链接器以指示链接器为我们生成名为file.map的映射文件。在使用-Wl选项时,它后面的选项如有多个则需要用逗号加以分割。
3.5 宏定义
3.5.1 指令格式
gcc -D'TEST="test"' file.c
3.5.2 说明
如果宏为字符串时,则需要用单引号引起来。
3.6 获取系统头文件路径
3.6.1 指令格式
gcc -v file.c
3.6.2 说明
系统头文件是指C语言本身和操作系统相关的头文件。在使用-v选项获取系统头文件路径时,必须后面带一个有效的C程序源文件,否则gcc输出的信息将不包含系统头文件路径这一内容。
3.7 生成依赖关系
3.7.1 指令格式
获取目标的完整依赖关系: gcc -M test.c
获取目标的部分依赖关系: gcc -MM test.c
3.7.2 说明
由于系统头文件在绝大多数情形下是不会改变的,因此在构造make所需的依赖关系时不必将它们纳入其中。通过-MM选项,可以让gcc生成不包含系统头文件的依赖关系。
3.8 指定库文件及库文件搜索路径
3.8.1 指令格式
-L选项:指定库文件的搜索路径
-l选项:指定库文件 ar crs libfunc.a func.o
gcc test.c -L. -lfunc
3.8.2 说明
注意,-L选项用于告诉gcc可以从哪个目录查找库文件,可以多次使用它以指定多个目录;-I选项则用于告诉gcc在生成可执行程序时需要链接的库名,这一选项同样可以多次使用以指定多个库。使用-l选项时要注意后面所跟的名字并不包括“lib”前缀和“.a”后缀。
修改记录
参考资料
唐老师 — 狄泰软件学院 — 十二月提升计划
李云 — 《专业嵌入式软件开发 全面走向高质量编程》
- 嵌入式C语言编译器:GCC
- 嵌入式Linux C语言开发工具—编译器gcc详解
- C语言简介,gcc编译器,gcc使用方法
- 嵌入式Linux-gcc编译器
- 嵌入式Linux编译器gcc
- 嵌入式Linux编译器-gcc
- 嵌入式gcc编译器详解
- C 语言编译器 gcc 命令详解
- C/C++语言——GCC编译器
- 【C语言学习笔记】初识GCC编译器
- 通过GCC编译器编译c语言
- 最小gcc.exe编译器(C语言)
- 嵌入式Linux编译器gcc使用
- 嵌入式Linux编译器gcc使用
- 嵌入式编译器gcc的笔记
- C 语言编译器 gcc 命令详解(Linux系统)
- 百尺竿头更进一步——编译器gcc对c语言的扩展
- 【c语言基础必备】gcc编译器的简单编译
- 线程
- Hadoop入门全集(零)
- JavaWeb 修炼之路(六)请求和响应中的编码
- Android Device Monitor使用
- 合并、联合、融合和聚合之间的区别
- 嵌入式C语言编译器:GCC
- js自执行函数的几种不同写法的比较
- Springmvc构造RESTful详细讲解
- Mac升级nasm
- An abandoned sentiment from past
- 关于百度地图提示,key验证出错 230
- java中extends与implements的区别浅谈
- mysql 如何根据父级字段得到所有子级
- MFC体系