![第2章Linux环境下C语言的开发_第1页](http://file4.renrendoc.com/view10/M03/28/11/wKhkGWWvBE-AJ8PwAALcsD2v0QI197.jpg)
![第2章Linux环境下C语言的开发_第2页](http://file4.renrendoc.com/view10/M03/28/11/wKhkGWWvBE-AJ8PwAALcsD2v0QI1972.jpg)
![第2章Linux环境下C语言的开发_第3页](http://file4.renrendoc.com/view10/M03/28/11/wKhkGWWvBE-AJ8PwAALcsD2v0QI1973.jpg)
![第2章Linux环境下C语言的开发_第4页](http://file4.renrendoc.com/view10/M03/28/11/wKhkGWWvBE-AJ8PwAALcsD2v0QI1974.jpg)
![第2章Linux环境下C语言的开发_第5页](http://file4.renrendoc.com/view10/M03/28/11/wKhkGWWvBE-AJ8PwAALcsD2v0QI1975.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2024/1/23Page1第2章Linux环境下C语言的开发
Linux和C语言有很深的渊源,因为Linux本身就是用C语言编写的。同时,在Linux操作系统中也提供了C语言的开发环境。这些开发环境一般包括程序生成工具、程序调试工具、工程管理工具等。本章介绍Linux环境下C语言开发的相关知识。
2024/1/23Page2第2章Linux环境下C语言的开发C语言简单回顾2.1Linux程序设计基础知识
2.2Linux下的C语言开发环境2.3嵌入式LinuxC语言开发流程和开发工程2.42024/1/23Page3第2章Linux环境下C语言的开发
嵌入式Linux中程序的运行原理2.5Linux程序设计的特点2.6Linux下的C语言编码的风格2.7本章小结2.8
思考与练习2.92024/1/23Page42.1C语言简单回顾
C语言最早是由贝尔实验室的DennisRitchie为了UINX的辅助开发而编写的,它是在B语言的基础上开发出来的。尽管C语言不是专门针对UNIX操作系统或机器编写的,但是它与UNIX的关系十分紧密。2024/1/23Page52.1C语言简单回顾
1987年,随着微型计算机的日益普及,出现了许多C语言版本。由于没有统一的标准,使得这些C语言之间出现了一些不一致的地方。为了改变这种情况,美国国家标准研究所(ANSI)为C语言制定了一套ANSI标准,成为现行的标准C语言的主要特点。2024/1/23Page62.1C语言简单回顾
1990年,国际化标准组织ISO(IntrernationalStandardOrganization)接受了87ANSIC为ISOC的标准(ISO9899-1990)。 1994年,ISO修订了C语言的标准。目前流行的C语言编译系统大多是以ANSIC为基础进行开发的,但不同版本的C编译系统说实现的语言功能和语法规则有略有差别。2024/1/23Page72.1C语言简单回顾
C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画,它是数值计算的高级语言。由于它的硬件无关性和可移植性,使得C语言逐渐成为世界上使用最广泛的语言。2024/1/23Page82.1C语言简单回顾
C语言的特点如下:
1.简洁紧凑、灵活方便 2.运算符丰富 3.数据结构丰富 4.C是结构式语言 5.C语法限制不太严格、程序设计自由度大2024/1/23Page92.1C语言简单回顾
6.允许直接访问物理地址,直接操作硬件 7.程序执行效率高 8.可移植性好
2024/1/23Page102.1C语言简单回顾
C语言有一个突出的优点就是适合于多种操作系统,如DOS、UNIX,也适用于多种机型。 C语言也有自身的不足,比如:C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。从应用的角度,C语言比其他高级语言较难掌握。2024/1/23Page112.2Linux程序设计基础知识2.2.1程序安装目录
Linux下程序通常保存在专门的目录里,系统软件可以在/usr/bin子目录里找到,系统管理员为某个特定的主机系统或本地网络添加的程序可以在/usr/local/bin子目录里找到。
2024/1/23Page122.2Linux程序设计基础知识
Linux系统中典型的应用程序由以下几部分组成:
普通执行程序文件(/usr/bin) 服务器执行程序文件和管理程序文件(/usr/sbin) 应用程序配置文件(/etc) 应用程序文档手册文件(/usr/share/doc/) 应用程序手册页文件(/usr/share/man/)
2024/1/23Page132.2Linux程序设计基础知识
系统管理员一般使用/usr/local子目录,该目录可以把供应商提供的文件和后来添加的程序以及系统本身提供的程序隔离开。 /usr子目录的这种布局方法在需要在对操作系统进行升级的时候非常有用。2024/1/23Page142.2Linux程序设计基础知识2.2.2头文件
glibc_header是Linux下的系统头文件,如果缺少系统头文件,很多用到系统功能的C程序将无法编译。在使用C语言和其他语言进行程序设计时,需要头文件来提供对常数的定义和对系统函数及库函数的调用的声明。2024/1/23Page152.2Linux程序设计基础知识 对C语言来说,这些头文件保存在/usr/include及其下级子目录里。 依赖于所运行的UNIX或Linux操作系统特定版本的头文件一般可以在/usr/include/sys或/usr/include/Linux子目录里找到。 其他的程序设计软件也可以有一些预先定义好的声明文件,它们的保存位置可以被相应的编译器自动查找到。2024/1/23Page162.2Linux程序设计基础知识 在调用C语言编译器时,可以通过-I编译命令标志来引用保存在下级子目录或者非标准位置的头文件。用grep命令来查找含有某些特定定义与函数声明的头文件是很方便的。头文件的保存位置: /usr/include:系统头文件 /usr/local/include:本地头文件2024/1/23Page172.2Linux程序设计基础知识
inux常用头文件如下所示:2024/1/23Page182.2Linux程序设计基础知识2.2.3库文件
函数库是一些预先编译好的函数的集合,这些函数都是按照可再使用的原则编写的。这些函数通常由一组相互关联的用来完成某项常见工作的函数构成。
2024/1/23Page192.2Linux程序设计基础知识 标准的系统库文件一般保存在/lib或者/usr/lib子目录里,编译时要告诉C语言编译器(链接程序)应该去查找哪些库文件。默认情况下,它只会查找C语言的标准库文件。 库文件必须遵守一定的命名规则,还必须在命令行上明确地给出。2024/1/23Page202.2Linux程序设计基础知识
库文件的名字总是以lib开头,随后的部分指明这是什么库(比如,libm就代表了数学库)。文件名的最后部分以.开始,然后给出库文件的类型: .a代表传统的静态函数库,应用程序从静态库中直接拷贝函数到二进制映像文件; .so代表共享函数库,可执行文件在运行时将函数代码从共享库文件中读出,从而间接引用。2024/1/23Page212.2Linux程序设计基础知识
库函数的基本路径: /lib:系统必备共享库。 /usr/lib:标准共享库和静态库。 /usr/local/lib:本地函数库。 /usr/i486-Linux-libc5/lib:libc5兼容性函数库。 /usr/XIIR6/lib:XIIR6函数库。2024/1/23Page222.2Linux程序设计基础知识 库文件的搜索顺序如下: (1)首先在“LD_LIBRARY_PATH”环境变量所设置的路径下查找; (2)搜索动态加载器在/etc目录下的缓存文件/etc/ld.so.cache。2024/1/23Page232.2Linux程序设计基础知识
GUU的C函数库,即glibc是Linux上最重要的函数库,它定义了ISOC语言标准指定的所有库函数,以及由POSIX或其他UNIX操作系统所指定的附加特色,还包括与GUU系统相关的扩展。glibc基于如下标准: (1)ISOC:即ANSIC.。 (2)POSIX:GNUC函数库实现了ISO/IEC9945-1:1996(POSIX系统应用程序编程接口,即POSIX.1)指定的所有函数。
(3)BerkeleyUNIX
:BSD和SunOS。
2024/1/23Page242.2Linux程序设计基础知识
(4)SviD:SystemV的接口描述。 (5)XPG:X/Open可移植性指南。
2024/1/23Page252.2Linux程序设计基础知识
glibc是linux系统中内核之上最底层的api,几乎其它任何的运行库都会倚赖于glibc。
glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现,主要的如下:2024/1/23Page262.2Linux程序设计基础知识 string:字符串处理
signa:信号处理
dlfcn:管理共享库的动态加载 direct:文件目录操作 elf:共享库的动态加载器,即interpreter
iconv:不同字符集的编码转换
inet:socket接口的实现2024/1/23Page272.2Linux程序设计基础知识
intl:国际化,即gettext的实现
io:基本IO操作
linuxthreads:线程 locale:本地化 login:虚拟终端设备的管理,及系统的安全访问
malloc:动态内存的分配与管理
stdlib:其它基本功能2024/1/23Page282.3Linux下的C语言开发环境 Linux中提供了C语言的开发环境。 这些开发环境包括程序生成工具、程序调试工具、工程管理工具等。2024/1/23Page292.3Linux下的C语言开发环境1.程序生成工具 在Linux中,一般使用GCC(GNUCompilerCollection)作为程序生成工具。GCC提供了C语言的编译器、汇编器、连接器以及一系列辅助工具。GCC可以用于生成Linux中的应用程序,也可以用于编译Linux内核和内核模块,是Linux中C语言开发的核心工具。2024/1/23Page302.3Linux下的C语言开发环境2.程序调试工具 GDB是Linux中一个强大的命令行调试工具,使用GDB调试C语言的时候,可以使用设置断点、单步运行、查看变量等功能。
2024/1/23Page312.3Linux下的C语言开发环境3.工程管理工具 在Linux操作系统下的程序开发中,一般使用make和Makefile作为工程管理工具。在工程管理方面,有效地使用它们可以统筹工程中的各个文件,并在编译过程中根据时间戳,有选择地进行编译,减少程序生成时间。
2024/1/23Page322.3Linux下的C语言开发环境
在Linux操作系统中,C语言程序的开发和其他环境类似,程序生成主要分成编译、汇编、连接等几个步骤。在Linux中使用文本编辑工具编辑程序源代码也是程序开发的重要步骤。
2024/1/23Page332.4嵌入式LinuxC语言开发流程和开发工具
C语言程序的开发过程是:使用编辑工具编写文本形式的C语言源文件,然后编译生成以机器代码为主的二进制可执行程序的过程。由源文件生成可执行程序的开发过程如下图所示。
2024/1/23Page342.4嵌入式LinuxC语言开发流程和开发工具2024/1/23Page352.4嵌入式LinuxC语言开发流程和开发工具 编译是指把用高级语言编写的程序转换成相应处理器的汇编语言程序的过程。从本质上讲,编译是一个文本转换的过程。 对嵌入式系统而言,一般要把用C语言编写的程序转换成处理器的汇编代码。编译过程包含了C语言的语法解析和汇编语言的生成两个步骤。
汇编一般是逐个文件进行的,对于每一个C语言编写的文件,可能还需要进行预处理。2024/1/23Page362.4嵌入式LinuxC语言开发流程和开发工具
汇编是从汇编语言程序生成目标系统的二进制代码(机器代码)的过程。机器代码的生成和处理器有密切的联系。相对于编译过程的语法解析,汇编的过程相对简单。这是因为对于一款特定的处理器,其汇编语言和二进制的机器代码是一一对应的。
汇编过程的输入是汇编代码,这个汇编代码可能来源于编译过程的输出,也可以是直接用汇编语言书写的程序。2024/1/23Page372.4嵌入式LinuxC语言开发流程和开发工具
连接过程是指将汇编生成的多段机器代码组合成一个可执行程序。一般来说,通过编译和汇编过程,每一个源文件将生成一个目标文件。 连接器的作用就是将这些目标文件组合起来,组合的过程包括了代码段、数据段等部分的合并,以及添加相应的文件头。 Linux下程序的开发过程及相关工具的使用如下图所示:
2024/1/23Page382.4嵌入式LinuxC语言开发流程和开发工具2024/1/23Page392.5嵌入式Linux中程序的运行原理 在Linux的开发环境中,C语言程序的运行环境如下图所示:2024/1/23Page402.5嵌入式Linux中程序的运行原理
作为UNIX操作系统的一种,Linux的操作系统提供了一系列的接口,这些接口被称为系统调用(SystemCall)。 C语言的库函数通过调用系统调用来实现,库函数对上层提供了C语言库文件的接口。在应用程序层,通过调用C语言库函数和系统调用来实现功能。 一般来说,应用程序大多使用C语言库函数实现其功能,较少使用系统调用。2024/1/23Page412.5嵌入式Linux中程序的运行原理
在Linux等系统的环境中,C语言库及其头文件都是系统的一部分,只要安装了编译工具即可以完成C语言程序的开发。 这点与Windows中程序的开发有所不同,Windows中一般需要安装开发包才能进行程序开发。2024/1/23Page422.5嵌入式Linux中程序的运行原理
C语言程序经过编译-汇编-连接,最终生成可执行程序格式。可执行程序中包含两个部分的内容:程序头和程序主体(二进制机器代码)。 在程序头中包含了供操作系统加载的信息,操作系统根据这些信息加载可执行程序。而可执行程序的主体依然是二进制的机器代码。程序在运行的时候,正是靠逐条地执行这些机器代码,形成程序运行的序列。2024/1/23Page432.5嵌入式Linux中程序的运行原理
在Linux操作系统中,普遍使用ELF格式来作为可执行程序或者程序生成过程中的中间格式。 ELF(ExecutableandLinkingFormat,可执行连接格式)是UNIX系统实验室(USL)作为应用程序二进制接口(ApplicationBinaryInterface,ABI)而开发和发布的。工具接口标准委员会(TIS)选择了正在发展中的ELF标准作为工作在32位Intel体系上不同操作系统之间可移植的二进制文件格式。
2024/1/23Page442.5嵌入式Linux中程序的运行原理
ELF文件格式包括以下三种主要的类型:
1.可执行文件(应用程序) 2.可重定向文件(*.o)
3.共享文件(*.so)2024/1/23Page452.5嵌入式Linux中程序的运行原理
一个ELF文件从连接器(Linker)的角度看,是一些节的集合;从程序加载器(Loader)的角度看,它是一些段(Segments)的集合。 ELF格式的程序和共享库具有相同的结构,只是段的集合和节的集合上有些不同。
2024/1/23Page462.5嵌入式Linux中程序的运行原理
ELF格式的共享库可以加载到任何地址。 事实上,共享库使用PIC(PlaceIndependenceCode,位置无关代码),使得文件的代码段(TextPage)不需要重定位,并且可以被多个进程共享。 ELF格式的连接器通过GOT(Global
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 合伙干股协议书
- 三农政策下的乡村旅游发展作业指导书
- 矿业与资源开发技术作业指导书
- 技术服务合同
- 管理咨询专业服务协议书
- 贷款担保书的
- 三农村合作社应急管理方案
- 小学三年级口算题两三位数乘除一位数
- 2025年阳泉资格证模拟考试
- 小学六年级数学口算竞赛试题
- 智能RPA财务机器人开发教程-基于来也UiBot 课件 第1章-机器人流程自动化概述
- 2024-2025学年河南省郑州市高二上期期末考试数学试卷(含答案)
- 2024-2025学年天津市河东区高一上学期期末质量检测数学试卷(含答案)
- 信永中和笔试题库及答案
- 甲流乙流培训课件
- 《视网膜静脉阻塞》课件
- 儿科学川崎病说课
- 2025《省建设工程档案移交合同书(责任书)》
- 2025年云南农垦集团总部春季社会招聘(9人)管理单位笔试遴选500模拟题附带答案详解
- 《大学英语1》期末考试试卷及答案(专科)
- 《石油钻井基本知识》课件
评论
0/150
提交评论