收藏 分销(赏)

第三章-Linux程序设计基础-C环境.ppt

上传人:快乐****生活 文档编号:14649962 上传时间:2026-10-25 格式:PPT 页数:44 大小:921.04KB 下载积分:10 金币
下载 相关
第三章-Linux程序设计基础-C环境.ppt_第1页
第1页 / 共44页
第三章-Linux程序设计基础-C环境.ppt_第2页
第2页 / 共44页


点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text stylesgood1,Second levelgood2,Third levelgood3,Fourth levelgood4,Fifth levelgood5,博创科技 嵌入互动,200,6,博,创科技,第三章,Linux C,编译调试基础,Linux程序设计基础C环境,Linux,编程环境介绍,常用编辑器及集成开发环境,GCC,编译器的使用,GNU Make,管理项目,GDB,调试,Linux编程环境介绍,Linux开发工具,构建编译环境,binutils,工具包,包括连接器,汇编器等,gcc,编译器,C,与,c,的编译器,和预处理器等,glibc,库,提供系统调用和,基本函数,C,库等,Linux开发工具,GCC,(,GNU Compiler Collection,),包含一系列针对不同语言和不同目标平台,以及可运行在不同主机系统上的编译器,Make,自动实现应用程序的编译和连接,GDB,(,GNU debugger,)负责程序调试,Glibc,标准,C,库,数学库,以及板级程序库,集成开发环境,GCC介绍,GCC,作为自由软件的旗舰项目,已经发展了有十多年的历史了。由最初的一个,C,程序语言编译器(,GNU C Compiler,)发展到今天不仅仅支持,C,语言,还支持,C+,语言、,Java,语言、,Objective C,语言、,Pascal,语言等,现在的,GCC,已经不再是简单的,GNU C,编译器的意思了,已经演变为,GNU Compiler Collection,即,GNU,编译器家族的含义。在硬件平台上,,GCC,几乎支持所有的硬件平台。,Make-,维护文件的依赖关系,使应用程序的编译和连接自动化,缩短编译可执行文件的时间,管理大型项目,按照代码之间的时间依赖关系维护文件,Linux程序设计基础C环境,Linux,编程环境介绍,常用编辑器及集成开发环境,GCC,编译器的使用,GNU Make,管理项目,GDB,调试,常用的文本编辑器:,vim,gedit,emacs,常用编辑器,Anjuta,vi 使用介绍,vi,是,UNIX,和,Linux,下自带的一个终端模式下的编辑器,vi,主要有三种模式,命令模式(,Command mode,),插入模式(,Insert mode,),最后一行模式(,Last line mode,),Vi基本操作,进入,Insert mode,在,Command mode,下可按,i,、,a,或,o,三键进入,Insert mode,离开,vi,及存档,在,Command mode,下可按,:,键进入,Last line mode,:,w filename (,存入指定档案,),:,wq (,写入并离开,vi),:,q!(,离开并放弃编辑的档案,),Command mode 功能键简介,进入,Insert mode,i:,插入,从目前游标所在之处插入所输入之文字。,a:,增加,目前游标所在之下一个字开始输入文字。,o:,从新的一行行首开始输入文字。,移动光标,h,、,j,、,k,、,l,分别为左、下、上、右,Ctrl+f,:向后一页,Ctrl+b,:向前一页,G,:移动至文件最末一行,也可以通过键盘上的方向键来移动光标,删除,X,或,Delete,键,-,删除一个字符,#x-,删除,#,个字符,例如,5x,dd-,删除光标所在的行,#dd-,删除包括光标行所在行的下几行,替换,r-,替换光标所在字符,R-,替换光标处字符直到按,键为止,复制,yw-,复制光标处一个字,yy-,复制光标处所在行,P-,将复制好的内容粘贴到光标处,Last line mode,列出行号,:,set nu,为文件中每一行编号,寻找字符串,:,/string,从文件头向文件尾查找,string,字符串,:?,string,从文件尾向文件头查找,string,字符串,Linux程序设计基础C环境,Linux,编程环境介绍,常用编辑器及集成开发环境,GCC,编译器的使用,GNU Make,管理项目,GDB,调试,GCC程序编译四阶段,预处理(Pre-Processing),编译(Compiling),汇编(Assembling),链接(Linking),GCC起步,hello.c#include int main(void)printf(Hello world,Linux programming!n);return 0;,然后执行下面的命令编译和运行这段程序:,#gcc hello.c-o hello#./helloHello world,Linux programming!,GCC 常用参数,g,:在可执行文件中输出调试信息,通常是为调试器,gdb,所用,On,:代码优化,,n,随着系统的不同而不同,Idir,:指定头文件搜索目录,gcc foo.c I/home/chen/include o foo,Ldir,:指定在目录中需要搜索的库,(,动态库,.so,和静态库,.a),gcc foo.c L/home/chen/lib lfoo o foo,static,:链接时使用静态链接,elf2flt,:将可执行文件头转换为,flt,平板格式,c,:只预处理,编译和汇编生产,obj,文件,o,:指定输出文件,Wall,:打开警报信息开关,Linux程序设计基础C环境,Linux,编程环境介绍,常用编辑器及集成开发环境,GCC,编译器的使用,GNU Make,管理项目,GDB,调试,为什么要采用make 工具,通常情况下程序都较复杂,其源代码由很多文件组成,这样使得程序在编译和连接的时候很复杂。,Shell,每次需要完全重新编译所有代码文件,不能根据更改时间来选择性的编译,Make,与其他解释语言不同,不是直接告诉,make,执行哪些命令,而是给出一些依赖规则,即在依赖文件更新的情况下执行什么处理,一旦启动,make,,那么,make,就自动分析文件的更新时间,完成剩下的工作。,GNU Make 功能介绍,Make,的功能,使应用程序的编译和连接自动化,缩短编译可执行文件的时间,管理大型项目,按照代码之间的时间依赖关系维护文件,make,规则文件,-Makefile,目标定义,执行命令,宏定义和,make,伪指令,文件的编写可以手工,也可以自动,使用工具软件 可以自动生成,Makefile,文件,缺省文件为当前目录下的,makefile,或,Makefile,,也可以使用命令行参数,f,指定文件名,Makefile文件规则,Makefile,文件是一个,make,指令的集合,这文件一般包含下面四个部分,目标定义,执行定义,宏定义,make,伪指令,Makefile,文件,#This is a example for us to know the Makefile,CC=/usr/local/arm-linux/bin/arm-linux-gcc#,指定编译器,LIB=/usr/local/arm-linux/arm-linux/lib#,指定所用库的搜索路径,EXEC=star#,定义目标文件名,OBJS=star.o hello.o#,为生成目标所使用的,.o,文件,$(EXEC):$(OBJS)#,目标与,.o,文件的依赖关系,$(CC)-I$(LIB)-o$(EXEC)$(OBJS)#,生成可执行文件,star.o:starfun.h star.c#star.o,依赖,starfun.h,star.c,$(CC)-c star.c#,生成,star.o,hello.o:starfun.h hello.h hello.c#hello.o,依赖,starfun.h,hello.h,hello.c,$(CC)-c hello.c#,生成,hello.o,clean:#clean,伪目标,rm-f*.o#,执行,make clean,时删除所有的,.o,文件,GNU Make 的工作步骤,读入所有的Makefile文件,读入被include的Makefile文件,初始化文件中的变量,推倒隐晦规则,并分析所有规则,为所有目标文件创建依赖关系链,根据依赖关系,决定哪些目标需要重新编译,执行生成命令,Linux程序设计基础C环境,Linux,编程环境介绍,常用编辑器及集成开发环境,GCC,编译器的使用,GNU Make,管理项目,GDB,调试,GDB-,程序的调试,可以调试各种程序,包括,C,C+,JAVA,PASCAL,等,具有远程调试功能对嵌入式非常有用,远程调试可以设置断点,检验内存,同目标交换信息相当于简易的仿真器,可以显示其自身和所调试的目标间的远程串行调试信息,也可依将该信息记录到日志文件中去。,可以求解在控制台中输入的任意,C,表达式的值,包括包含有远端目标的函数功能调用的表达式,拥有脚本语言,允许对目标自动的设置和检测。,拥有跟踪点的功能,该功能可以记录某个运行程序的信息,而尽可能的不打断程序收集数据,启动GDB调试的三种方式,gdb,program,也就是你的执行文件,一般在当然目录下,gdb core,用,gdb,同时调试一个运行程序和,core,文件,,core,是,程序非法执行后,core dump,后产生的文件,gdb ,如果你的程序是一个服务程序,那么你可以指定,这个服务程序运行时的进程,ID,。,gdb,会自动,attach,上去,并调试他。,program,应该在,PATH,环境变量,中搜索得到,GDB中常用命令,list,or,l,(list code),list,list main,list 20,run,or,r,(run program from beginning),run,run file1.txt file2.txt,next,or,n,(execute next line,step over function calls),step,or,s,(execute next line,step into function calls),break,or,b,(set a breakpoint),break main,break 10,delete,or,d,(delete a breakpoint),delete,delete 10,continue,or,c,(continue execution when stopped),print,or,p,(print value),print x,print x*y,print function(x),display,(continuously display value),undisplay,(remove display value),where,(show current function stack),set,(change a value),Set n=3,help,or,h,(display help text),Help,Help step,Help breakpoints,quit,or,q,(quit GDB),GDB远程调试,Gdb可以通过使用target remote模式来打开远程调试功能,远程调试可以使用网口或者串口,为了能使用远程调试功能必须要编译gdb源码,生成gdbserver工具,gdbserver是运行在开发板上的工具,在开发板上启动gdbserver,在远程体调试的第一步就是要在开发办上启动,gdbserver,工具,可以采用两种不同的连接方式,网口,串口,/mnt/yaffs/zxt,./gdbserver 192.168.0.47:1234 hello,Process hello created;pid=105,主机,ip,地址及端口号,/mnt/yaffs/zxt,./gdbserver /dev/tts/0 hello,Process hello created;pid=112,Remote debugging using/dev/tts/0,开发板串口号,在主机上启动arm-linux-gdb,在开发板上启动gdbserver以后,第二步就是在主机上运行arm-linux-gdb来启动gdb调试应用程序,同样针对于启动的连接方式不同选用不同的参数,rootlocalhost gcc-gdb#,armv4l-unknown-linux-gdb hello,GNU gdb 5.2.1,Copyright 2002 Free Software Foundation,Inc.,GDB is free software,covered by the GNU General Public License,and you are,welcome to change it and/or distribute copies of it under certain conditions.,Type show copying to see the conditions.,There is absolutely no warranty for GDB.Type show warranty for details.,This GDB was configured as-host=i686-pc-linux-gnu-target=armv4l-unknown-linux.,(gdb),启动远程调试功能,(gdb),target remote 192.168.0.115:1234,Remote debugging using 192.168.0.115:1234,0 x40000d00 in?(),(gdb)list,1#include,2,3 int main(),4,5 int i;,6 for(i=0;i 10;i+),7 ,8 printf(helloworld.NOM%dn,i);,9 ,10 return 0;,(gdb),开发板,ip,地址及端口号,(gdb)target remote/dev/ttyS0,启用串口方式调试:,设置断点,(gdb),break main,Breakpoint 1 at 0 x20003a0:file hello.c,line 6.,(gdb),break 8,Breakpoint 2 at 0 x20003bc:file hello.c,line 8.,(gdb),c,Continuing.,Breakpoint 1,main()at hello.c:6,6 for(i=0;i 10;i+),(gdb),c,Continuing.,Breakpoint 2,main()at hello.c:8,8 printf(helloworld.NOM%dn,i);,(gdb),使用DDD可视化工具调试,使用,DDD,进行可视化调试和在终端中命令行调试的过程基本一致,都是要先启动,gdbserver,并指明调试连接方式,在启动,gdb,时使用下面的命令,#ddd-debugger armv4l-unknown-linux-gdb hello,Linux软件开发流程,用编辑器(,vi,,,emacs,等)编辑源代码,编辑,Makefile,文件管理代码,用编译器编译代码,GDB,调试程序,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服