《嵌入式Linux应用开发教程 教学课件 华清远见嵌入式学院 赵苍明 穆煜 第二章嵌入式linux C语言开发工具》由会员分享,可在线阅读,更多相关《嵌入式Linux应用开发教程 教学课件 华清远见嵌入式学院 赵苍明 穆煜 第二章嵌入式linux C语言开发工具(54页珍藏版)》请在金锄头文库上搜索。
1、在线教务辅导网:http:/教材其余课件及动画素材请查阅在线教务辅导网QQ:349134187 或者直接输入下面地址:嵌入式应用程序设计第二章 嵌入式Linux C语言程序开发工具 嵌入式Linux下C语言概述 2.2 编辑器vim 2.3 编译器gcc 2.4 调试器GDB2.5 make工程管理器 2.6 autotools小结2.9 思考与练习本章课程:3嵌入式Linux下C语言概述C语言最早是由贝尔实验室的Dennis Ritchie为了UNIX的辅助开发而编写的,它是在B语言的基础上开发出来的。尽管语言不是专门针对UNIX操作系统或机器编写的,但它与UNIX系统的关系十分紧密。由于它
2、的硬件无关性和可移植性,使C语言逐渐成为世界上使用最广泛计算机语言。 42.1 嵌入式Linux下C语言概述C语言有如下特点: C语言是“中级语言”。它把高级语言的基本结构和语句与低级语言的实用性结合起来。 C语言是结构化的语言。 C语言功能齐全。 C语言可移植性强。5嵌入式Linux下C语言概述编辑器 常用的编辑器有vi(vim)和Emacs 编译链接器 常用的编译器是GCC编译器 调试器 GDB 项目管理器 项目管理器make62.2 编辑器vim2.2.1 vi的基本模式2.2.2 vi的基本操作72.2.1 vi的基本模式标准模式(Normal mode)通常进入vim后默认处于标准模
3、式(或者称为命令模式)。在此模式下任何键盘的输入都是作为命令来对待。命令的输入通常是不回显的,只显示执行的结果。插入模式(Insert Mode)用户只有在插入模式下才可以进行字符输入,用户按Esc键可回到命令行模式下。 命令行模式(Command-line mode) 在此模式下,用户可以将文件保存或退出vim,也可以设置编辑环境,如寻找字符串、列出行号等。 可视模式(Visual mode) 在此模式下,通过移动光标选择文本,选中的文本将反白显示,这样提供高效、直观的编辑功能。用户按下ESC键可回到命令行模式。 82.2.2 vi的基本操作1. vim的进入、保存和退出进入vim可以直接在
4、命令终端下键入vim 文件名,vim可以自动载入所要编辑的文件或是开启一个新的文件。如在shell中键入vim (新建文件)则可进入vim环境。进入vi后屏幕左方会出现波浪符号,凡是具有该符号就代表此列目前是空的。此时进入的是命令行模式。要退出vim可以在命令行模式下键入“:q”(不保存并退出)或“:q!”(不保存并强制退出)或“:wq”(保存并退出)指令则是保存之后再离开(注意冒号)。92.2.2 vi的基本操作命令类别命令说明编辑:e filename编辑文件名为filename的文件。若这个文件不存在,则会开启一个名为filename的新文件的编辑保存:w保存文件,文件应已有名字:w f
5、ilename以文件名filename保存文件退出:q退出,如果文件已修改则不能退出:q!不保存强行推出,无论文件是否被修改:wq保存后退出102.2.2 vi的基本操作2. 光标的移动除了使用标准光标键移动光标之外,vim还提供了很多复杂的光标移动方式。 命令类别命令说明基本操作h, j, k, l分别等同于左方向键、下方向键、上方向键、右方向健字操作w移至下一个单词 的字首e移至下一个单词 的字尾b移至上一个单词 的字首行操作0移至行首$移至行尾G移至文件尾部gg移至文件首部H移至当前屏幕顶部M移至当前屏幕中间行的行首L移至当前屏幕底部最后一行的行首n-向上移动n行n+向下移动n行nG移至
6、第n行页操作Ctrl + f屏幕往“上”翻动一页,等同于PageUpCtrl + b屏幕往“下”翻动一页,等同于PageDownCtrl + u屏幕往“上”翻动半页Ctrl + d屏幕往“下”翻动半页112.2.2 vi的基本操作3. 文本编辑 文本编辑包括输入、修改、复制、粘贴、删除(可以用Del键和Backspace键)和恢复等操作 。命令类别命令说明修改r修改光标所在的字符,键入r后直接键入待修改字符R进入取代状态,在光标所指定的位置修改字符,该替代状态直到按下ESC键才结束复制yy复制光标所在行nyy复制光标所在行开始的n行,如3yy表示复制三行y复制光标至行首y$复制光标至行尾yw复
7、制一个字(单词 )yG复制光标文件尾y1G复制光标文件首粘贴p粘贴至光标后P粘贴至光标前删除x删除光标所在位置的一个字符X删除光标所在位置的前一个字符s删除光标所在的字符,并进入输入模式S删除光标所在的行,并进入输入模式dd删除光标所在的行ndd从光标所在行开始向下删除n行D删除至行尾,等同于d$dG删除至文件尾部d1G删除至文件首部,等同于dgg恢复u撤销上一步的操作。可以多次撤销U在光标离开之前,恢复所有的编辑 操作Ctrl + r返回至撤销操作之前的状态122.2.2 vi的基本操作4. 查找与替换vim的查找和替换功能都支持正则表达式,可以匹配非常复杂的关键字,功能非常强大。 类别命令
8、说明查找/向下查找要查找的字符?向上查找要查找的字符n继续查找N反向查找替换:ranges/pattern/string/c,e,g,irange:指定查找的范围。例如1,$指替换范围从第0行到最后一行;s:指转入替换模式;pattern:指要被替换的字符串,可以用正则表达式;string:指替换的字符串;c:每次替换前询问;e:不显示错误;g:强制整行替换;i:不区分大小写132.3 编译器gcc 2.3.1 GCC的简介2.3.2 GCC的编译流程2.3.3 GCC的常用编译选项142.3.1 GCC的简介GNU CC(简称为gcc)是GNU项目中符合ANSI C标准的编译系统,能够编译用
9、C、C+和Object C等语言编写的程序。gcc不仅功能强大,而且可以编译如C、C+、Object C、Java、Fortran、Pascal、Modula-3和Ada等多种语言,而且gcc又是一个交叉平台编译器,支持的硬件平台很多,如alpha、arm、avr、hppa、i386、m68k、mips、powerpc、sparc、vxworks、x86_64、MS Windows、OS/2等等。它能够在当前CPU平台上为多种不同体系结构的硬件平台开发软件,因此尤其适合在嵌入式领域的开发编译。 152.3.1 GCC的简介gcc的编译流程分为了4个步骤,分别为:预处理(Pre-Processi
10、ng)编译(Compiling)汇编(Assembling)链接(Linking)后 缀 名所对应的语言编 译 流 程.cC原始程序预处理、编译、汇编.C/.cc/.cxxC+原始程序预处理、编译、汇编.mObjective-C原始程序预处理、编译、汇编.i已经过预处 理的C原始程序编译、汇编.ii已经过预处 理的C+原始程序编译、汇编.s/.S汇编语 言原始程序汇编.h预处理文件(头文件)(不常出现在指令行).o目标文件链接.a/.so编译后的库文件链接162.3.1 GCC的简介GCC使用的基本语法为: gcc option | filename172.3.2 GCC的编译流程预处理阶段处
11、理的主要作用是通过预处理的内建功能对一些可预处理资源进行等价替换,最常见的可预处理资源有:文件包含、条件编译、布局控制和宏处理等。gcc的选项“-E”可以使编译器在预处理结束时就停止编译,选项“-o”是指定GCC输出的结果,其命令格式为如下所示。gcc E o 目标文件 编译文件例如:$ gcc E o 182.3.2 GCC的编译流程编译阶段 编译器在预处理结束之后,gcc首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,就开始把代码翻译成汇编语言,gcc的选项“-S”能使编译器在进行汇编之前就停止。由表可知,“.s”是汇编语言原始程序,因此,此处的目标文件
12、就可设为“.s”类型。$ gcc S o 192.3.2 GCC的编译流程汇编阶段汇编阶段是把编译阶段生成的“.s”文件生成目标文件,读者在此使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了。如下所示。$ gcc c o 202.3.2 GCC的编译流程链接阶段。 完成了链接之后,gcc就可以生成可执行文件,其命令如下所示。$ gcc o hello运行该可执行文件,出现正确的结果。$ ./hellohello, embedded world 212.3.3 gcc的常用编译选项gcc有超过100个的可用选项,包括总体选项、警告和出错选项、优化选项和体系结构等相关选项。 (1
13、)常用选项选项含义-c只编译汇编不链接,生成目标文件“.o”-S只编译不汇编,生成汇编代码-E只进行预编译,不做其他处理-g在可执行程序中包含标准调试信息-o file将file文件指定为输出文件-v打印出编译器内部编译各过程的命令行信息和编译器的版本-I dir在头文件的搜索路径列表中添加dir目录222.3.3 gcc的常用编译选项(2)库相关选项选 项含 义-static进行静态编译,即链接静态库,禁止链接动态库-shared1可以生成动态库文件2进行动态编译,尽可能地链接动态库,只有当没有动态库时才会链接同名的静态库(默认选项,即可省略)-L dir在库文件的搜索路径列表中添加dir目
14、录-lname链接称为libname.a(静态库)或者libname.so(动态库)的库文件。若两个库都存在,则根据编译方式(-static还是-shared)而进行链接-fPIC(或-fpic)生成使用相对地址的位置无关的目标代码(Position Independent Code)。然后通常使用gcc的-static选项从该PIC目标文件生成动态库文件。232.3.3 gcc的常用编译选项(3)警告和出错选项选 项含 义-ansi支持符合ANSI标准的C程序-pedantic允许发出ANSI C标准所列的全部警告信息-pedantic-error允许发出ANSI C标准所列的全部错误信息-
15、w关闭所有警告信息-Wall允许发出gcc提供的所有有用的报警信息-werror把所有的警告信息转化为错误信息,并在警告发生时终止编译过程242.3.3 gcc的常用编译选项(4)优化选项gcc可以对代码进行优化,它通过编译选项“-On”来控制优化代码的生成,其中n是一个代表优化级别的整数。对于不同版本的gcc来讲,n的取值范围及其对应的优化效果可能并不完全相同,比较典型的范围是从0变化到2或3 252.3.3 gcc的常用编译选项(5)体系结构相关选项选 项含 义-mcpu=type针对不同的CPU使用相应的CPU指令。可选择的type有i386、i486、pentium及i686等-mie
16、ee-fp使用IEEE标准进行浮点数的比较-mno-ieee-fp不使用IEEE标准进行浮点数的比较-msoft-float输出包含浮点库调用的目标代码-mshort把int类型作为16位处理,相当于short int-mrtd强行将函数参数个数固定的函数用ret NUM返回,节省调用函数的一条指令262.4 调试器GDBGDB是GNU开源组织发布的一个强大的Linux下的程序调试工具,它是一种强大的命令行调试工具。一个合格的调试器需要有以下几项基本功能。 能够运行程序,设置所有能影响程序运行的参数。 能够让程序让指定的条件下停止。 能够在程序停止时检查所有参数的情况。 能够根据指定条件改变程序的运行。272.4.1 gdb使用流程进入GDB gdb test 查看文件l设置断点 b 6 查看断点处情况 info b 运行代码 r 查看变量值 p n / p i单步运行 n恢复程序运行 c观察变量 watch n 退出GDB q282.4.2 gdb基本命令1工作环境相关命令命 令 格 式含 义set args运行时的参数指定运行时参数,如set args 2show args查看设置