最新嵌入式系统基础-第九讲-嵌入式交叉编译解读PPT课件.ppt
《最新嵌入式系统基础-第九讲-嵌入式交叉编译解读PPT课件.ppt》由会员分享,可在线阅读,更多相关《最新嵌入式系统基础-第九讲-嵌入式交叉编译解读PPT课件.ppt(62页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式系统基础嵌入式系统基础-第九讲第九讲-嵌嵌入式交叉编译解读入式交叉编译解读嵌入式交叉编译基础嵌入式交叉编译基础1 嵌入式交叉编译环境12 NFS服务2 3 Windows和Linux混合开发模式 34 GCC编译器46 Make工具的使用65 GDB调试器5混合开发模式的必要:由于初学者对Linux系统不是很熟悉,通常会采用Windows下强大的编辑工具,通过共享再在Linux系统下进行编译、调试等工作。(1)VMware虚拟机设置共享(2)SSH客户端软件(3)Windows下的文本编辑工具3 Windows3 Windows和和LinuxLinux混合开发模式混合开发模式(1 1)V
2、MwareVMware虚拟机设置共享虚拟机设置共享-1-13 Windows3 Windows和和LinuxLinux混合开发模式混合开发模式(2 2)SSHSSH客户端软件客户端软件SSH的英文全称:Secure ShellSSH把所有传输的数据进行加密,并且SSH客户端软件可将传输的数据进行压缩后再传输。(1)PuTTY(2)Secure Shell Client3 Windows3 Windows和和LinuxLinux混合开发模式混合开发模式(3 3)WindowsWindows下的文本编辑工具下的文本编辑工具UltraEdit-32Source Insight3 Windows3 W
3、indows和和LinuxLinux混合开发模式混合开发模式gcc(GNU C Compiler)能将C、C+语言源程序、汇编语言程序和目标程序编译、连接成可执行文件。是GNU推出的功能强大、性能优越的多平台编译器,可以在多种硬体平台上编译出可执行程序,其执行效率与一般的编译器相比平均效率要高20%30%。4 GCC4 GCC编译器编译器gcc的执行过程 使用gcc由C语言源代码文件生成可执行文件的过程要经历四个相互关联的步骤 1、预处理(也称预编译,Preprocessing)对头文件(include)、预编译语句(如define等)进行分析预处理器cpp2、编译(Compilation)将
4、预处理后的文件转换成汇编语言,生成文件.s编译器ccl3、汇编(Assembly)由汇编变为目标代码(机器代码),生成.o的文件汇编器as4、连接(Linking)连接目标代码,生成可执行程序链接器ld 4 GCC4 GCC编译器编译器四个相互关联的步骤四个相互关联的步骤源文件源文件.c.cq1 1、.c.c源文件源文件q2 2、生成、生成.i.i文件文件q3 3、生成文件、生成文件.s.sq4 4、生成、生成.o.o的文件的文件q5 5、生成可执行程序、生成可执行程序-E-E-S-S-c-c预处理编译汇编链接4 GCC4 GCC编译器编译器GNU C 的使用基本语法 gcc options
5、filenames说明:q在gcc后面可以有多个编译选项,同时进行多个编译操作。当你不用任何选项编译一个程序时,GCC将会建立(假定编译成功)一个名为a.out的可执行文件。4 GCC4 GCC编译器编译器gcc选项-o选项 你能用-o 编译选项来为将产生的可执行文件指定一个文件名来代替 a.out。例:gcc o count count.c-c选项:告诉GCC仅把源代码编译为目标代码,而取消连接的步骤。缺省时GCC建立的目标代码文件有一个.o的扩展名。例:gcc c test2.c-E 只运行 C 预编译器。-S 编译选项告诉 gcc 在为 C 代码产生了汇编语言文件后停止编译。4 GCC4
6、 GCC编译器编译器-include file-include file功能相当于在代码中使用#include例子用法:gcc-o example example.c-include/usr/include/stdio.h-I-I 用来指定头文件目录用来指定头文件目录./usr/include /usr/include目录目录一般是不用指定的一般是不用指定的,但是如果头文件不在但是如果头文件不在/usr/include/usr/include里我们就要用里我们就要用-I-I参数指定参数指定了了;比如头文件放在比如头文件放在/myinclude/myinclude目录,那编译命令行就要加上目录,
7、那编译命令行就要加上 -Imyinclude-Imyinclude参数了,如果不加你会得到一个参数了,如果不加你会得到一个“xxxx.h:No xxxx.h:No such file or directory”such file or directory”的错误。的错误。4 GCC4 GCC编译器编译器Gdb(GNU debugger)是GNU开发组织发布的一个强大的Unix/Linux下的程序调试工具。是一个命令行的调试器,但gdb具有比很多图形化调试器更强大的功能。可以调试各种程序,包括C,C+,JAVA,PASCAL等具有远程调试功能对嵌入式非常有用5 Gdb5 Gdb调试器调试器Gdb
8、主要可以完成下面任务:(1)启动程序,并可以指定某些参数控制程序的运行(2)可让被调试的程序在用户所指定的断点处停住(3)当程序停止时,检查程序的状态(4)动态地改变程序的参数,可以避过bug,继续查找其他的问题5 Gdb5 Gdb调试器调试器gdb gdb programprogram也就是你的执行文件,一般在当前目也就是你的执行文件,一般在当前目录下录下5 Gdb5 Gdb调试器调试器Gdb的命令可以使用help命令来查看,help命令只是列出gdb的命令种类。使用help命令,显示class种类中的所有命令。使用help命令,查看command命令的帮助。Gdb中输入命令时,可以不用输入
9、命令的全称,只用输入命令的前几个字符就可以。在linux下,可以按两次TAB键来补齐命令的全称。Gdb中运行Linux的shell程序,如shell。5 Gdb5 Gdb调试器调试器5 Gdb5 Gdb调试器调试器加载要调试的执行文件加载要调试的执行文件file file 加载要调试的执行程序加载要调试的执行程序execexec。5 Gdb5 Gdb调试器调试器查看源代码查看源代码list list 显示程序第显示程序第linenumlinenum行的周围的源程序行的周围的源程序list list 显示函数名为显示函数名为functionfunction的函数周围的源程序的函数周围的源程序li
10、st list 显示当前行后面的源程序显示当前行后面的源程序list-list-显示当前行前面的源程序显示当前行前面的源程序set listsize nset listsize n设置一次显示源代码的行数设置一次显示源代码的行数show listsizeshow listsize查看当前查看当前listsizelistsize的设置的设置5 Gdb5 Gdb调试器调试器设置断点(设置断点(BreakPointBreakPoint)breakbreak-进入指定函数时停住。进入指定函数时停住。breakbreak-在指定行号停住在指定行号停住5 Gdb5 Gdb调试器调试器清除断点清除断点del
11、ete breakpoints rangedelete breakpoints range删除指定的断点,删除指定的断点,breakpointsbreakpoints为断点号,为断点号,rangerange表示断点号的范围(如:表示断点号的范围(如:2-42-4)。如果不指定)。如果不指定断点号,则表示删除所有的断点。其简写命令断点号,则表示删除所有的断点。其简写命令为为d d。比删除更好的一种方法是比删除更好的一种方法是disabledisable断点,断点,disabledisable了了断点,断点,gdbgdb不会删除,当还需要时,不会删除,当还需要时,enableenable即即可,就
12、好像回收站一样。可,就好像回收站一样。5 Gdb5 Gdb调试器调试器设置观察点设置观察点观察点一般用来观察某个表达式的值是否变观察点一般用来观察某个表达式的值是否变化了。化了。watch watch 为表达式(变量)为表达式(变量)exprexpr设置一个观察点。一设置一个观察点。一旦表达式值有变化时,马上停住。旦表达式值有变化时,马上停住。info watchpointsinfo watchpoints列出当前设置的所有观察点列出当前设置的所有观察点5 Gdb5 Gdb调试器调试器run(r)run(r)从程序开始运行程序从程序开始运行程序continue (c)continue (c)恢
13、复程序运行,直到程序结束,或是下一个断点到来。恢复程序运行,直到程序结束,或是下一个断点到来。step(s)step(s)单步执行,进入调用的函数的内部单步执行,进入调用的函数的内部next(n)next(n)单步执行,不会进入调用的函数内部单步执行,不会进入调用的函数内部finish(f)finish(f)如果已进入了某函数,而想退出该函数返回到它的调如果已进入了某函数,而想退出该函数返回到它的调用函数中用函数中 5 Gdb5 Gdb调试器调试器练习1(1)键入vi,编辑一个新文件exam.c。其内容如下:#include main()int a,i=0;a=0;while(i10)a=a+
14、2;printf(the value of a=%d n,a);sleep(1);i=i+1;5 Gdb5 Gdb调试器调试器练习1(2)保存退出exam.c 编译exam.c。q使用 gcc -o examo exam.c q使用 gcc -g -o gexam exam.cq比较gexam 与 examo的大小,因为 gexam含有调试信息,所以gexam比 examo大。执行gexam与examo q执行examo 键入./examo。这里./表示当前目录q执行gexam 键入./gexam。练习1(3)使用gdb调试程序(1)启动gdb程序(gdb)gdb(2)读入调试程序(gdb)f
15、ile gexam(3)列出相应于正在执行的程序的原文件内容(gdb)list(4)在程序a=0;处设置一个断点(gdb)break 4(注:这里4 为程序a=0;所在程序的行号)(5)在程序printf(“the value of a=%d n”,a);处设置一个断点(6)执行该程序(gdb)run(7)查看变量a的值(gdb)print a(8)查看变量a的类型(gdb)whatis a(9)执行下一个源程序行(gdb)next(10)从断点开始继续执行到下一个断点(gdb)continue(11)查看变量a的值(gdb)print a,看看a是否有变化(12)不停地执行(gdb)cont
16、inue,直到程序结束。(13)退出gdb quit练习2:程序功能为先显示一个字符串,再反序显示,使用GDB找出其中的错误并改正#include void my_print(char*string)printf(The string is%sn,string);void my_print2(char*string)char*string2;int size,i;size=strlen(string);string2=(char*)malloc(size+1);for(i=0;i size;i+)string2size-i=stringi;string2size+1=0;printf(The
17、string printed backward is%sn,string2);练习2:程序功能为先显示一个字符串,再反序显示,使用GDB找出其中的错误并改正int main()char my_string=hello there;my_print(my_string);my_print2(my_string);return;MakeMake工具及工具及makefilemakefile文件概述文件概述MakefileMakefile基本知识基本知识MakefileMakefile应用应用 1 1)为单个文件编写)为单个文件编写makefilemakefile 2 2)为多个文件编写)为多个文件编
18、写makefilemakefile 3 3)使用不同目录的文件的)使用不同目录的文件的makefilemakefile的写法的写法6 Makefile6 Makefile工具工具MakeMake工具及工具及makefilemakefile文件概述文件概述GNU Make是程序自动维护工具在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入 gcc 命令进行编译的话,则会 非常不方便。因此,人们通常利用 make 工具来自动完成编译工作。这些工作包括:1)如果仅修改了某几个源文件,则只重新编译这几个源文件;2)如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。Makefi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 嵌入式 系统 基础 第九 交叉 编译 解读 PPT 课件
限制150内