嵌入式软件开发培训笔记——C高级 开发环境
2015-04-16 12:15
411 查看
(1)GNU工具:
a)编译工具——GCC、G++;
b)调试工具——GDB;
c)软件工程工具——make、makefile;
d)其他工具——多个目标文件链接成可执行文件的链接器
e)GNU资源:www.gnu.org 、gcc.gnu.org 等
(2)GCC全称GNU CC,符合ANSI C标准的编译系统,编译如C、C++、Object
C、JAVA等;可在多种平台编可译可执行程序;是一个交叉平台编译器。常用的比较稳定的版本为GCC 3.3、GCC4.3。
GCC编译过程:a)源代码经预处理生成.i文件;b).i文件经编译器生成.s文件;c).s文件汇编处理生成.o文件;d).0文件经过链接最终生成.exe可执行程序。编译器的主要组件有分析器(源->.s)、汇编器(.s->.o)、链接器(多个.o链接成.exe)。
GCC所支持后缀名解释
GCC执行过程:
a)调用cpp进行预处理,对源码中的文件包含-include头文件、预编译语句-define宏定义进行分析;
b)调用cc1进行编译,生成.o目标文件;
c)调用as进行汇编,汇编文件经预编译和汇编生成.o目标文件;
d)调用ld进行链接,生成.exe可执行文件。
GCC错误类型:
a)C语法错误——syntax error;
b)头文件错误——can not find include file or directory;
c)档案库错误——No such file or directory;d)未定义符号——Undefined symbol。
GCC基本用法和选项、格式如下:
以上四步可用gcc test.c –o test一步执行到位。
补充:-c选项只编译,不连接生成可执行试文件;-o filename输出文件名,不可与源文件同名;-O、-O2对程序进行优化编译/连接,后者比前者更好,但过程会更慢;-Idirectory将dirname目录加入到程序头文件搜索列表;-Ldirname将dirname所指出的目录加入到程序函数档案库文件的目录列表中,dirname是一个绝对路径。
使用Binutils中的readelf –h .exe文件 显示elf格式的可执行文件、以及strip .exe文件对其进行瘦身/减小体积。
Gdb调试工具:先使用gcc –g test.c –o test生成带调试信息的可执行文件,然后使用gdb test进行调试;gdb调试中相关命令如下:
补充:gcc -Wall
编译时将所有警告全部都打开
a)编译工具——GCC、G++;
b)调试工具——GDB;
c)软件工程工具——make、makefile;
d)其他工具——多个目标文件链接成可执行文件的链接器
e)GNU资源:www.gnu.org 、gcc.gnu.org 等
(2)GCC全称GNU CC,符合ANSI C标准的编译系统,编译如C、C++、Object
C、JAVA等;可在多种平台编可译可执行程序;是一个交叉平台编译器。常用的比较稳定的版本为GCC 3.3、GCC4.3。
GCC编译过程:a)源代码经预处理生成.i文件;b).i文件经编译器生成.s文件;c).s文件汇编处理生成.o文件;d).0文件经过链接最终生成.exe可执行程序。编译器的主要组件有分析器(源->.s)、汇编器(.s->.o)、链接器(多个.o链接成.exe)。
GCC所支持后缀名解释
.c | C源程序 | .s/.S | 汇编源 |
.C/.cc/.cxx | C++源程序 | .h | 预处理文件(头文件) |
.m | Objective-C源程序 | .o | 目标文件 |
.i | 预处理后的C源 | .a/.so | 编译后的库文件 |
.ii | 预处理后的C++源 |
a)调用cpp进行预处理,对源码中的文件包含-include头文件、预编译语句-define宏定义进行分析;
b)调用cc1进行编译,生成.o目标文件;
c)调用as进行汇编,汇编文件经预编译和汇编生成.o目标文件;
d)调用ld进行链接,生成.exe可执行文件。
GCC错误类型:
a)C语法错误——syntax error;
b)头文件错误——can not find include file or directory;
c)档案库错误——No such file or directory;d)未定义符号——Undefined symbol。
GCC基本用法和选项、格式如下:
gcc –E test.c –o test.i 源码->预处理后的源码,仍为C文件 |
gcc –S test.c –o test.s 源码->汇编 |
gcc –c test.s –o test.o 汇编代码->汇编处理生成目标文件gcc –c可用as替换 |
gcc test.s –o test ./test 将目标程序链接成库资源,生成可执行程序 |
补充:-c选项只编译,不连接生成可执行试文件;-o filename输出文件名,不可与源文件同名;-O、-O2对程序进行优化编译/连接,后者比前者更好,但过程会更慢;-Idirectory将dirname目录加入到程序头文件搜索列表;-Ldirname将dirname所指出的目录加入到程序函数档案库文件的目录列表中,dirname是一个绝对路径。
使用Binutils中的readelf –h .exe文件 显示elf格式的可执行文件、以及strip .exe文件对其进行瘦身/减小体积。
Gdb调试工具:先使用gcc –g test.c –o test生成带调试信息的可执行文件,然后使用gdb test进行调试;gdb调试中相关命令如下:
查看文件 | l | 查看变量值 | p 变量名 |
设置断点 | b 行号 | 单步运行 | n 或 s |
查看断点情况 | Info b | 恢复程序运行 | c |
运行代码 | r | 帮助 | help |
编译时将所有警告全部都打开
相关文章推荐
- 嵌入式软件开发培训笔记——C高级 存储类、链接和内存管理
- 嵌入式软件开发培训笔记——C高级 预处理&类型重定义
- 嵌入式软件开发培训笔记——C高级 指针
- 嵌入式软件开发培训笔记——C高级 数据结构与算法基础
- 嵌入式软件开发培训笔记——C高级 指针和数组
- 嵌入式软件开发培训笔记——ARM架构Linux系统下交叉编译环境搭建、NFS、TFTP服务配置及Nandflash的读写
- 嵌入式软件开发培训笔记——C高级 指针和函数
- 嵌入式软件开发培训笔记——C高级 结构体与共用体
- 嵌入式软件开发培训笔记——Java第一天(开发环境搭建、入门引导)
- 嵌入式软件开发培训笔记——Java第二天(运算符、程序结构、数组与继承)
- 嵌入式软件开发培训笔记——java第五天(API——math/string/集合/日期时间以及java线程)
- 嵌入式软件开发培训笔记——网络配置(详细NFS及TFTP配置)
- 嵌入式软件开发培训笔记——boot原理与u-boot 基于Cortex_A8核的S5PC100芯片
- 嵌入式软件开发培训笔记——基于S5PC100的课程设计
- 嵌入式软件开发培训笔记——java第六天(IO、网络编程、反射与JNI)
- 嵌入式软件开发培训笔记——shell编程
- 嵌入式软件开发培训笔记——linux标准I/O库
- 嵌入式软件开发培训笔记——c编程基础
- 嵌入式软件开发培训笔记——Java第三天(方法重载、对象的构造与初始化过程分析、封装等)
- 嵌入式软件开发培训笔记——嵌入式linux内核与文件系统移植与分析