版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
版权声明:本课件及其印刷物、视频的版权归成都国嵌信息技术有限公司所有,并保留所有权力:任何单位或个人未经成都国嵌信息技术有限公司书面授权,不得使用该课件及其印刷物、视频从事商业、教学活动。已经取得书面授权的,应在授权范围内使用,并注明来源:国嵌。违反上述声明者,我们将追究其GCC程序GDB程序工GCC程序GDB程序工程嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群GCC程序GDB程序工GCC程序GDB程序工程嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群Linux系统下的Linux系统下的CCompiler)是GNU推出的功能强大、译器相比平均效率要高20%~30%GCC编译器能将GCC编译器能将C、C++汇编程序编译、链接在Linux系统中,嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群使用GCC编译使用GCC编译程序时,编译分为四个阶段预处理(Pre-编译汇编链接嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群Gcc.c为后缀Gcc.c为后缀的文件.a为后缀的文件C语言源代码是由目标文件构成的库是C++源代码文.C,.cc或为后缀的文件.h为后缀的文件头文为后缀的文件.ii为后缀的文件.o为后缀的文件.s为后缀的文件.S为后缀的文件嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群起步(演示起步(演示intmain(void){printf(Helloworld!\n);return0;}编译和运行这段程序#gcchello.c-ohello#./hello输出:Hellogccgccgccgcc[options]filenames:要编译的文件名。嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群gcc编译器的编译选项大约有100gcc编译器的编译选项大约有100其中多数我们根本就用不到,这里只介-ooutput_filename:确定可执行文件的名称嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群编译选项intmain(void)编译选项intmain(void){doubleresult;doubletemp;for(counter=0;counter<2000.0*2000.0*counter+=(5-1)/{temp=counter/1979;result=counter;}printf(Resultis%lf\\n,result);return0;}/20.0+嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群gccoptimize.c-otimegccoptimize.c-otimegcc–Ooptimize.c-ooptimizetime./optimize对比两次执行的输出结果不难看出,程序的的确得到了很大幅度的嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群-中将dirnameC-中将dirnameC#include对于<>,预处理程序cpp在系统预设的头文件目录(/usr/include)中搜寻相应的文件;而对于””,cpp在当前中搜寻头文件。这个选项的作用是告诉cpp,如果在当前中没有找到需要的文件,就到指定的dirname目录中去例:gccfoo.cIhome/includeo嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群-Ldirname:将dirname-Ldirname:将dirname所指出的目录加入嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群“libname.a”的“libname.a”的函数库,该函数库位于系统预设的目录或者由-L选项确定的目“libm.a”的数例:gccfoo.cL/home/liblfooo嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群-static:例:gccstatic-static:例:gccstatichello.co库有动态与静态两种,动态通常用.so为后缀,静态用为后缀。例如:libhllo.solibhllo.。当使用静态库时,连接器找出程序所需的函数,然后将它们拷贝到可执行文件,一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样,动态库会在执行程序内留下一个标记指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库。嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群-Wall:-w-Wall:-w:-DMACRO:定义MACRO宏,等于在程序中使用嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群GCC程序GDB程序工GCC程序GDB程序工程嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群起步起步voidmain(){intlongresult=0;for(i=1;i<=100;i++){result+=}printf("result=%d\n",result}嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群GDB快速进GDB快速进gcc-gtst.c-ogdbbreak嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群GDB快速进 GDB快速进 嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群启动gdb调试程序启动gdb调试程序例:gdb2.file调试程序嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群GDB命令(演示查看GDB命令(演示查看在某函数入口处添加break(b)在指定行添加break(b)行break(b)文件名:行号在指定文件的指定行当条件为真时,指定行break(b)行if条处断点生效,例b5ifi=10,当i等于10时第5断点生GDB命令(演示infoGDB命令(演示infodelete断点编 继续运行程GDB命令(演示GDB命令(演示print(p)finish运行程序,watchquit(q)退出GCC程序GDB程序工GCC程序GDB程序工程嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群GNULinux程GNULinux程序员必须学会使用make来构建和管理自己的软件程。GNU的make嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群make在执行时需要一个命名为make在执行时需要一个命名为嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群Makefile(例hello:main.oMakefile(例hello:main.ofunc1.ogccmain.ofunc1.ofunc2.o-ohellomain.o:main.cgcc–cmain.cfunc1.o:func1.cgcc–cfunc1.cfunc2.o:func2.cgcc–c.PHONY:cleanclean:rm–fhellomain.ofunc1.o 嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群Makefile(术语targetsMakefile(术语targets:main.o:main.cgcc–cmain.c**命令需要以【TAB】键开始嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群在Makefile在Makefile为最终的目标嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群make命令默make命令默认在当前目录下寻找名字makefile或者Makefile的工程文件,当名make–f嵌入式Linux技术咨询QQ号嵌入式Linux学习交流QQ群Makefile中把那些没有任Makefile中把那些没有任何依赖只有动作的目标称为“伪目标targets).PHONY:cleanclean:rm–fhellomain.ofunc1.o将“clean”目标声明为伪目hello:main.ofunc1.ohello:main.ofunc1.ogccmain.ofunc1.ofunc2.o-ohello:main.ofunc1.ofunc2.ogccmain.ofunc1.ofunc2.ofunc3.o-o答案obj=main.ofunc1.ofunc2.ofunc3.ohello:$(obj)gcc$(obj)-o嵌入式Linux技术咨询QQ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论