如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
《嵌入式Linux上的C语言编程实践》第13章韩超/魏治宇/廖文江电子工业出版社1.1Linux下的C语言开发环境第1章Linux环境下C语言的开发本章介绍Linux操作系统环境下C语言开发的基本概念和程序运行的原理。在本章的学习中,读者应重点关注以下内容:Linux中C语言开发的流程和工具Linux中C语言程序的运行机制1.1Linux下的C语言开发环境Linux和C语言有很深的渊源,因为Linux本身就是用C语言编写的。同时,在Linux操作系统中也提供了C语言的开发环境。这些开发环境一般包括程序生成工具、程序调试工具、工程管理工具等。1.程序生成工具在Linux中,一般使用GCC(GNUCompilerCollection)作为程序生成工具。GCC提供了C语言的编译器、汇编器、连接器以及一系列辅助工具。GCC可以用于生成Linux中的应用程序,也可以用于编译Linux内核和内核模块,是Linux中C语言开发的核心工具。2.程序调试工具GDB是Linux中一个强大的命令行调试工具,使用GDB调试C语言的时候,可以使用设置断点、单步运行、查看变量等功能。3.工程管理工具在Linux操作系统下的程序开发中,一般使用make和Makefile作为工程管理工具。在工程管理方面,有效地使用它们可以统筹工程中的各个文件,并在编译过程中根据时间戳,有选择地进行编译,减少程序生成时间。1.2在Linux中使用C语言开发在Linux操作系统中,C语言程序的开发和其他环境类似,程序生成主要分成编译、汇编、连接等几个步骤。在Linux中使用文本编辑工具编辑程序源代码也是程序开发的重要步骤。1.2.1开发流程和开发工具C语言程序的开发过程是:使用编辑工具编写文本形式的C语言源文件,然后编译生成以机器代码为主的二进制可执行程序的过程。由源文件生成可执行程序的开发过程如图1-1所示。(点击查看大图)图1-1Linux中C语言程序的开发流程编译是指把用高级语言编写的程序转换成相应处理器的汇编语言程序的过程。从本质上讲,编译是一个文本转换的过程。对嵌入式系统而言,一般要把用C语言编写的程序转换成处理器的汇编代码。编译过程包含了C语言的语法解析和汇编语言的生成两个步骤。汇编一般是逐个文件进行的,对于每一个C语言编写的文件,可能还需要进行预处理。汇编是从汇编语言程序生成目标系统的二进制代码(机器代码)的过程。机器代码的生成和处理器有密切的联系。相对于编译过程的语法解析,汇编的过程相对简单。这是因为对于一款特定的处理器,其汇编语言和二进制的机器代码是一一对应的。汇编过程的输入是汇编代码,这个汇编代码可能来源于编译过程的输出,也可以是直接用汇编语言书写的程序。连接过程是指将汇编生成的多段机器代码组合成一个可执行程序。一般来说,通过编译和汇编过程,每一个源文件将生成一个目标文件。连接器的作用就是将这些目标文件组合起来,组合的过程包括了代码段、数据段等部分的合并,以及添加相应的文件头。在Linux的C语言程序生成过程中,源代码经过编译-汇编-连接生成可执行程序。GCC是Linux下主要的程序生成工具,它除了编译器、汇编器、连接器外,还包括一些辅助工具。调试是程序开发一个很重要的环节。在Linux的程序开发中,最主要的调试工具是GDB。GDB是一个命令行调试工具,可以实现在程序中设置断点、单步执行、查看对应源代码等功能。虽然Linux中基本的开发工具GCC和GDB都是命令行工具,但是它们也可以和IDE(集成开发环境)结合使用。Linux下程序的开发过程及相关工具的使用如图1-2所示。1.2.2Linux中程序的运行原理在Linux的开发环境中,C语言程序的运行环境如图1-3所示。作为UNIX操作系统的一种,Linux的操作系统提供了一系列的接口,这些接口被称为系统调用(SystemCall)。在UNIX的理念中,系统调用"提供的是机制,而不是策略"。C语言的库函数通过调用系统调用来实现,库函数对上层提供了C语言库文件的接口。在应用程序层,通过调用C语言库函数和系统调用来实现功能。一般来说,应用程序大多使用C语言库函数实现其功能,较少使用系统调用。图1-3Linux下C语言程序的结构在Linux等系统的环境中,C语言库及其头文件都是系统的一部分,只要安装了编译工具即可以完成C语言程序的开发。这点与Windows中程序的开发有所不同,Windows中一般需要安装开发包才能进行程序开发。C语言程序经过编译-汇编-连接,最终生成可执行程序格式。可执行程序中包含两个部分的内容: