第十一章 嵌入式Linux系统的应用程序开发.ppt_第1页
第十一章 嵌入式Linux系统的应用程序开发.ppt_第2页
第十一章 嵌入式Linux系统的应用程序开发.ppt_第3页
第十一章 嵌入式Linux系统的应用程序开发.ppt_第4页
第十一章 嵌入式Linux系统的应用程序开发.ppt_第5页
已阅读5页,还剩94页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1、嵌入式系统第11章嵌入式Linux系统的应用开发,2、第11章议程,11.1 Linux应用开发概述11.2使用VI 11.3 Linux应用开发使用gcc 11.4 GNU make和makefile 11.5 GUI,3、嵌入式Linux,3、11.1 Linux应用开发概述,嵌入式Linux的应用开发基本上等同于Linux的应用开发,只是采用了交叉编译环境,并且开发库专用于嵌入式系统(如ulibc库或specific)被采用;4、嵌入式Linux的应用开发主要有两种特殊文件:可执行文件是一种可以由计算机直接执行的程序,相当于win平台下的exe文件。(本章通常以elf格式讨论)脚本程

2、序是一组指令,将由另一个程序(通常是shell解释器)执行,这相当于dos下的bat文件。(略),5,嵌入式Linux应用程序开发,所有要搜索的子目录都保存在一个名为PATH的shell变量中,这类似于dos下的情况。路径由系统管理员预先配置,通常包括/bin、/usr/bin、/usr/local/bin。您可以使用echo $PATH来显示它。如果您使用root用户登录系统,您还将包括以下目录:/sbin,/usr/sbin。6,嵌入式linux应用程序开发,可以使用linux操作系统vi/vim编辑器或emacs编辑器gcc编译器和链接器(这是我们采用的最原始、最有效的方法),可以使用w

3、indows操作系统cgywin编译器环境,也可以使用Linux操作系统kdeveloper和Kylix等IDE环境,7,第11章议程, 11.3 Linux应用程序开发概述11.2 VI的使用11.3 Linux应用程序开发使用gcc 11.4 make和Makefile的GNU 11.4 GNU的嵌入式Linux 8,VI,VI是第一个全屏交互式编辑程序的Linux系统。 自诞生以来,一直受到用户的青睐。经过几十年的发展,它仍然是人们使用的主要文本编辑工具,其强大的功能带来了强大的生命力。目前,vim一般在Linux安装后使用,支持不同颜色的c关键字显示,9和VI模式,Vi有三种模式,即命

4、令行模式、插入模式和底线模式:(1)命令行模式当用户用Vi编辑文件时,最初进入命令行模式。在这种模式下,您可以通过上下移动光标来删除字符或删除整行,也可以复制和粘贴,但不能编辑文本。(2)插入模式只有在这种模式下,用户可以编辑和输入字符,用户可以按下ESC键返回命令行模式。(3)底线模式在此模式下,光标位于屏幕的底线。用户可以保存或退出文件,也可以设置编辑环境,如查找字符串和列出行号。10,11,Vi,命令模式:可以完成粘贴和复制等命令,12,Vi,插入模式:完成程序编辑,13,Vi,底线模式:完成文档底部保存,14,Vi输入和内容输入,15,命令模式,16,命令模式,17,底线模式,18首先

5、,进入linux的控制台界面。然后,在某个目录下创建一个空的C程序文件,例如,使用touch/home/赵辉/linuxapp/hello.c命令,然后cd到当前目录,调用vi编辑器编辑这个空文件,并输入这个程序的源代码(使用vi hello.c命令,进入vi编辑器,然后进入vi编辑状态,然后进入程序,然后进入vi的底线状态保存源程序和vi),19,vi示例,-hello . C-# include int main()printf(你好,Linux编程世界!n);返回0;例如,输入命令在当前目录中编译这个程序,如果程序中没有错误,你可以在当前目录中得到一个例如,这个命令将调用gcc的预编译器

6、(cpp),编译器(生成。s文件),汇编程序(生成。o文件)和链接器(ld)。22,Vi,当然,您也可以使用objdump dhhello来查看汇编代码。objdump之类的命令称为binutils,是非常强大的代码分析工具。例如addr2line、ar、as、gprof、ld、nm、objcopy、objdump、ranlib、size、strings、strip等。详情请参见其手册。23,24,增补:头文件和函数库,由linux程序开发的头文件静态库共享库,25,由linux程序开发的头文件静态库共享库,26,1。头文件。一般来说,每个C /C程序通常由头文件和定义文件组成。作为包含功能函

7、数和数据接口声明的载体文件,头文件用于保存程序的声明,而定义文件用于保存程序的实现。C /C程序的头文件以“.”为后缀。 h。27,对于C语言,头文件一般存在于/usr/in cude目录下,而对于linux操作系统,头文件一般存在于/usr/include/sys和/usr/include/linux目录下。其他编程系统也可以有它们自己独立的目录,例如/usr/include/X11或/usr/include/g,头文件,28,gcc: I的可选参数,用于在编译阶段指定头文件的非标准位置。例如,gcc I /usr/*/include test.c将在test.c文件的指定位置找到一些头文件

8、。头文件,29,定义:它是预编译函数的集合,根据可重用性原则编写。它们通常是一组相互关联的函数,用来完成一个共同的任务(如标准的输入输出函数、时间函数和C库中的数学函数等)。)。库文件的含义:它是一组二进制目标代码,一旦可用就可以使用。当程序需要使用函数库中的一个函数时,声明这个函数的头文件将通过include语句被引用。程序函数库可以使整个程序更加模块化,更容易重新编译,更便于升级。30、编译器和链接器负责将程序代码和库函数组合成独立的可执行程序。如果您使用扩展库而不是标准的C语言运行时,您必须指定它的位置和名称(使用I、L和L参数)。在链接阶段,会搜索一些默认目录,如/lib和/usr/l

9、ib,以找到所需的库文件。库文件,31,命名规则:它通常以lib开始,后跟表示函数库函数的名称部分。例如伦敦银行同业拆放利率、伦敦银行同业拆放利率和伦敦银行同业拆放利率。类型:分为静态库和共享库,后缀名称分别为a和so(通常两个版本都存在于系统的/lib中)。在win平台下,分别有lib和dll。库文件,32,在编译程序时,为了保证正常链接,可以告诉gcc库文件的位置(当然,标准C库不需要指定,但是其他非标准库需要指定)。Gcc: l的可选参数,用于指定链接阶段中非标准库文件的位置。例如:$ gcc ox11 fedel/usr/openwin/libx 11 feded . clx 11,l

10、ibrary file,33,static libraries:它是一个公共目标文件的集合,也称为归档文件,通常使用。”a”作为文件的后缀,如libc.a和libX11.a自己构建静态函数库的方法:在编写库函数时,尝试将不同类型的函数实现写入不同的源代码文件;然后用gcc的编译命令独立编译每个文件,从而得到自己的目标文件;然后使用ar命令将所有目标文件打包在一起。3。静态库,34。1)编写一个包含两个函数的小型函数库。分别使用两个源代码文件。2)相应的代码如下:弗雷德。C-#包含无效的弗雷德(int arg)打印文件(弗雷德:您传递了% dn,arg);静态库:例如,35,bill . c-#

11、 include void bill(char * arg)printf(bill :您通过了% sn,arg);静态库:示例,36,3)编译两个源代码文件。弗雷德。c $ ls *。比尔。弗雷德。o,静态库:示例37,4)使用ar命令将目标代码添加到库文件中。$ arcrvlibfoo。账单。弗雷德。一张账单。弗雷德。o,静态库:示例38,静态库:示例5)为了让库用户重用库提供的函数,应该编写一个头文件,其中声明了库提供的函数。如果另一个程序员打算使用库提供的服务,头文件必须包含在头文件中。39,静态库:例如,lib.h/*这是lib.h。它声明函数Fred和bill for users *

12、/void bill(char *);void Fred(int);40,静态库:示例,6)编写一个测试程序并在库中使用一个函数。源代码如下:program . c # include lib . h int main()bill(hello world);退出(0);41,静态库:示例,7)编译并运行第一个方法-$ gcc程序。c $ gcc o计划。比尔。o第二种方法-$ gcc o程序。o libfoo。a第三种方法-$ gcc o程序。o l.lfoo $。/program bill :您通过了hello world $,42,static library,static library

13、的优点:由ELF格式的静态库函数生成的代码可以比使用共享函数库的程序运行得更快。静态库的缺点:如果我们同时运行多个程序,并且它们都使用同一个函数库中的函数,那么内存中会有同一个函数的多个副本,程序文件中也会有同一个函数的多个副本。这些会造成硬盘和内存空间的大量浪费。使用共享库可以解决上述两个问题。43,4。共享库:可执行程序启动时加载的函数。每个共享函数库都有一个特殊的名字,叫做“soname”。Soname命名必须以“lib”为前缀,然后是函数库的名称,然后是“.”所以”,最后是版本号信息。共享库的存储位置与静态库相同。例如,您可以使用ls命令在/lib目录中显示库的名称。一个可能的输出是l

14、ibc.so.6(这是一个软链接文件),它是C语言标准库的共享版本,6代表主要版本号。44,共享库的特点,如果一个程序使用共享库,其链接方式如下:程序本身不再包含函数代码,而只保存共享代码的调用引用,并且共享代码是在程序运行时添加到其中的。当编译后的程序加载到内存中执行时,函数引用被解析,程序调用共享库,共享库仅在必要时才加载到内存中。45,共享库的优势,1。多个进程使用同一个函数库:这样,系统可以在内存中只保留一个共享库的副本供许多程序使用,并且只需要在硬盘上保留一个副本。2.修改函数库不需要重新编辑:共享库的升级将不再影响那些依赖它的程序。例如,我们只需要修改从/lib/libc.so.6

15、到实际库文件的升级版本的符号链接。46,共享库安装,当安装新版本的函数库时,应该首先将这些函数库文件复制到一些特定的目录并运行ldconfig。Ldconfig检查现有的库文件,然后创建soname到实际函数库的符号链接,并设置缓冲文件/etc/ld.so.cache。例如,创建两个目标文件(a.o和b.o),然后创建包含a.o和b.o的共享函数库,47,加载共享库,linux中的加载器:对于Linux系统,在应用程序中负责加载共享库和解析函数调用线索的程序(即共享库的动态加载器)是ld.so或ld-linux.so.2在/etc/ld.so.conf文件中配置了用于搜索共享库的其他目录;如果这个文件被修改(例如,X11共享库被添加到系统中),它可以被工具程序ldd处理(事实上,让ld-linux.so.2将配置文件的内容重新读入内存)。48,ldd命令,ldd命令:如果您想知道一个程序需要使用哪个共享库

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论