最新嵌入式Linux应用程序开发教程03Linux下的C编程基础.ppt
嵌入式Linux应用程序开发标准教程,三 Linux下的C编程基础,第三章 Linux 下的C 编程基础本章目标熟悉Linux 系统下开发环境熟悉gcc 编译器基本原理熟练使用gcc 编译器常用选项熟练使用gdb 调试技术熟悉Makefile 基本原理及语法规范熟练使用autoconf 和automake 生成Makefile,嵌入式Linux应用程序开发标准教程,3.1 Linux下C语言编程概述,3.1.1 C 语言简单回顾ANSI C硬件无关性中级语言结构化语言功能齐全可移植性强,编译过程示意图,嵌入式Linux应用程序开发标准教程,3.1 Linux下C语言编程概述,3.1.2 Linux 下C 语言编程环境概述编辑器vi编译链接器gcc调试器gdb项目管理工具make,嵌入式Linux应用程序开发标准教程,3.3 gcc编译器,gcc编译器版本GNU Compiler Collectionhttp:/gcc.gnu.orgGNU CC 4.6.2(2011.10.26)GNU CC 4.6.3,GCC 4.3.0,GCC 2.95,July 31,1999,GCC 3.0,June 18,2001,GCC 3.2,August 14,2002,GCC 3.3,May 13,2003,December 3,1997,GCC 4.4.5,GCC 4.6.3,Oct 26,2011,嵌入式Linux应用程序开发标准教程,3.3 gcc编译器,gcc编译环境GNU CC ANSI CC、C+、Object C、Java、Fortran、Pascal,嵌入式Linux应用程序开发标准教程,3.3 gcc编译器,3.3.1 gcc 编译流程解析gcc编译过程格式:gcc 选项 源文件 选项 目标文件,Pre-processor(cpp/gcc-E),Compiler(cc1/gcc-S),Assembler(as/gcc-c),Linker(ld),hello.c(text),hello.i(text),hello.s(text),hello.o(binary),hello(binary),printf.o(binary),预处理:生成文件编译文件.i,编译:代码翻译成汇编语言编译文件.s,汇编:转成目标文件编译文件.o二进制代码,连接:默认使用动态库,生成可执行文件,嵌入式Linux应用程序开发标准教程,3.3 gcc编译器,3.3.2 gcc 编译选项分析(1)总体选项,嵌入式Linux应用程序开发标准教程,3.3 gcc编译器,3.3.2 gcc 编译选项分析(2)警告和出错选项,(3)优化选项-On 来控制优化代码的生成,0、1、2、3调试的时候最好不使用任何优化选项,只有当程序在最终发行的时候才考虑对其进行优化,嵌入式Linux应用程序开发标准教程,3.4 gdb调试器,3.4.1 gdb 使用流程gcc 编译过程一定要加上选项“-g”gdb 调试可执行文件查看文件 l设置断点 b nb n if var=20查看断点情况 info b运行代码 r查看变量值 p+变量名单步运行 n s恢复程序运行 c,嵌入式Linux应用程序开发标准教程,3.4 gdb调试器,3.4.2 gdb 基本命令help1工作环境相关命令2设置断点与恢复命令函数断点条件断点3gdb 中源码查看相关命令4gdb 中查看运行数据相关命令5gdb 中修改运行参数相关命令实验:用gdb调试程序的bug,P87,嵌入式Linux应用程序开发标准教程,3.5 Make工程管理器,自动编译管理器通过读入Makefile 文件的内容来执行大量编译工作用户只需编写一次简单的编译语句3.5.1 Makefile 基本结构Makefile 是Make 读入的唯一配置文件需要由make工具创建的目标体(target),通常是目标文件或可执行文件要创建的目标体所依赖的文件(dependency_file)创建每个目标体时需要运行的命令(command),嵌入式Linux应用程序开发标准教程,3.5 Make工程管理器,3.5.1 Makefile 基本结构Makefile 格式target:dependency_files commandMake 格式make target示例:hello.o:hello.c hello.h gcc c hello.c o hello.omake hello.o,嵌入式Linux应用程序开发标准教程,3.5 Make工程管理器,3.5.2 Makefile 变量时间戳make 允许在Makefile 中创建和使用变量变量是在Makefile 中定义的名字,用来代替一个文本字符串,该文本字符串称为该变量的值可以代替目标体、依赖文件、命令以及makefile 文件中其他部分两种变量定义方式递归展开方式,格式为VAR=var简单展开方式:定义格式为VAR:=varMake 中变量格式为$(VAR),嵌入式Linux应用程序开发标准教程,3.5 Make工程管理器,3.5.2 Makefile 变量预定义变量,嵌入式Linux应用程序开发标准教程,3.5 Make工程管理器,3.5.2 Makefile 变量Makefile中常见自动变量,嵌入式Linux应用程序开发标准教程,3.5 Make 工程管理器,3.5.3 Makefile 规则1隐式规则2模式规则%隐式规则目录,嵌入式Linux应用程序开发标准教程,3.6 Make工程管理器,3.5.4 Make管理器的使用常用的命令行选项实验:编写包含多文件的Makefile,P89,