从实践中学嵌入式Linux C编程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-07-14 22:48:08

点击下载

作者:华清远见嵌入式学院

出版社:电子工业出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

从实践中学嵌入式Linux C编程

从实践中学嵌入式Linux C编程试读:

内容简介

本书详细介绍了开发工具和Linux C语言基础、嵌入式Linux C语言高级编程、内核常见数据结构的解析与应用、嵌入式Linux编程基础、文件I/O操作相关的C语言应用及网络通信相关的C语言应用等,并设置了嵌入式Linux C函数参考附录。

本书是大学院校嵌入式技术专业、电子信息类其他专业的专业课程教材,也可供高等及中等职业技术院校使用。未经许可,不得以任何方式复制或抄袭本书之部分或全部内容。版权所有,侵权必究。图书在版编目(CIP)数据从实践中学嵌入式Linux C编程 / 华清远见嵌入式学院编著. —北京:电子工业出版社,2012.3高等院校嵌入式人才培养规划教材ISBN 978-7-121-15883-4Ⅰ. ①从… Ⅱ. ①华… Ⅲ. ①Linux操作系统-程序设计-高等学校-教材②C语言-程序设计-高等学校-教材 Ⅳ. ①TP316.89②TP312中国版本图书馆CIP数据核字(2012)第023558号策划编辑:胡辛征责任编辑:贾 莉特约编辑:赵树刚出版发行:电子工业出版社     北京市海淀区万寿路173信箱 邮编100036开  本:787×1092 1/16 印张:19.75 字数:506千字印  次:2012年3月第1次印刷印  数:3000册  定价:39.80元凡所购买电子工业出版社图书有缺损问题,请向购买书店调换。若书店售缺,请与本社发行部联系,联系及邮购电话:(010)88254888。质量投诉请发邮件至zlts@phei.com.cn,盗版侵权举报请发邮件至dbqq@phei.com.cn。服务热线:(010)88258888。

印  次:2012年3月第2次印刷        印  次:2012年3月第5次印刷

印  数:5001~8000册  定价:59.00元   印  数:18001~22000册  定 价:39.80元

推荐序

移动与云计算的发展推动了越来越多的新技术、新应用和新产品的涌现,推动了嵌入式电子产品世界的不断更新和快速发展。作为嵌入式行业最著名的厂商之一,20多年来ARM除了不断地加大研发投资,开发最新的微处理器、图形技术、物理IP和开发工具,为产业升级搭建了最佳的开发架构;同时,也一直致力于建设一个开放的、具有强大生命力和发展前景的ARM嵌入式生态系统,使得每个存在于这个生态系统的成员都能发挥各自的特长,通过有效的产业分工和协作开发出高性能、低功耗、人性化的嵌入式产品服务于广大的消费者。

在这个生态系统中,嵌入式操作系统是必不可少的重要环节,是“链接”底层硬件和上层应用软件的纽带。其中,Linux作为开源的嵌入式操作系统,多年来一直受到广大工程师朋友的喜爱,特别是在基于Linux内核的Android操作系统发布以来,Linux的应用和发展到了一个崭新的高度。ARM作为应用最广泛的嵌入式处理器,对Linux操作系统的发展也做出了大量的支持与贡献。吴雄昂ARM中国区总经理前 言

在今天所处的大时代背景下,嵌入式、3G、物联网、云计算俨然已经成为信息产业的主旋律,不管是从政府大力扶持,还是从产业变革来说,这股潮流早已势不可挡。而嵌入式系统正是这些产业应用技术中最核心的部分。随着智能化电子行业的迅猛发展,嵌入式行业更是凭借其“应用领域广、人才需求大、就业薪资高、行业前景好”等众多优势,成为当前最热门、最有发展前途的行业之一,与此同时,嵌入式研发工程师更是成为IT职场的紧缺人才。因此,近几年来,各大学、高职高专院校开始纷纷开设嵌入式专业。但是,各院校在嵌入式专业教学建设的过程中几乎都面临教材难觅、内容更新迟缓的困境。虽然目前市场上嵌入式开发相关书籍比较多,但几乎都是针对有一定基础的行业内研发人员而编写的,并不完全符合高校的教学要求。

针对高校专业教材缺乏的现状,我们以多年来在嵌入式工程技术领域内人才培养、项目研发的经验为基础,汇总了近几年积累的数百家企业对嵌入式研发相关岗位的真实需求,并结合行业应用技术的最新状况及未来发展趋势,调研了数十所开设“嵌入式工程技术”专业的院校的课程设置情况、学生特点和教学用书现状。通过细致的整理和分析,对专业技能和基本知识进行合理划分,编写了这套高等院校嵌入式人才培养规划教材,包括:《从实践中学ARM嵌入式体系结构与接口技术》。《从实践中学嵌入式Linux操作系统》。《从实践中学嵌入式Linux C编程》。《从实践中学嵌入式Linux应用程序开发》。

本套教材按照专业整体教学要求组织编写,各自对应的主干课程之间既相对独立又有机衔接,整套教材具有系统性。《从实践中学ARM嵌入式体系结构与接口技术》侧重介绍接口技术;在操作系统教材方面,根据各院校的教学重点和行业实际应用情况,编写了《从实践中学嵌入式Linux操作系统》;考虑到嵌入式专业对学生C语言能力要求较高,编写了《从实践中学嵌入式Linux C编程》,可作为“C语言基础”课程的后续提高课程使用;《从实践中学嵌入式Linux应用程序开发》则重点突出了贯穿前面所学知识的实训内容,供“嵌入式Linux应用开发”课程使用。

作为嵌入式Linux开发的主要编程语言,C语言是嵌入式开发工程师的必备基础。本书从嵌入式Linux环境下C语言的开发工具入手,通过大量的代码和实例分析,引领读者逐步掌握嵌入式Linux平台上C语言编程的核心知识和技能。

全书共7章,第1章介绍了嵌入式Linux下常用的C语言开发工具,为后面的学习打下基础。

第2章和第3章讲解了嵌入式Linux C语言的基础和高级编程的经验技巧。

第4章介绍了嵌入式Linux内核中常见的数据结构。

第5章为文件操作,主要讲述了Linux系统调用、Linux文件I/O系统、底层文件I/O操作、嵌入式Linux串口应用编程、标准I/O编程等内容。

第6章为进程/线程编程,主要讲解了Linux系统下进程的基本概念与进程管理相关的系统调用、进程间通信的方法和多线程编程的知识。

第7章为网络通信相关的C语言应用,主要讲解了Linux环境下网络编程方法。涉及网络的非阻塞访问、异步处理、多路复用等具体实现。

本书由华清远见嵌入式学院金牌讲师曾宏安编著。本书的完成还要感谢华清远见嵌入式学院,教材内容参考了学院与嵌入式企业需求无缝对接的、科学的专业人才培养体系。同时,嵌入式学院从业或执教多年的行业专家团队也对教材的编写工作做出了贡献,刘洪涛、冯利美、曹忠明、程姚根、季久峰、温尚书、贾燕枫、方琳琳、沈静、冯瑜、杨曼、王利丽、李媛媛、张丹、刘晶晶、王丽丽、谭翠君、关晓强、王彦红等老师在书稿的编写过程中认真阅读了所有章节,提供了大量在实际教学中积累的重要素材,对教材结构、内容提出了中肯的建议,并在后期审校工作中提供了很多帮助,在此表示衷心的感谢。

由于编者水平所限,书中不妥之处在所难免,恳请读者批评指正。对于本书的批评和建议,可以发到www.embedu.org技术论坛。编者著2012年1月第1章 嵌入式Linux C 语言开发工具从实践中学嵌入式Linux C编程

任何应用程序的开发都离不开编辑器、编译器及调试器,嵌入式Linux的C语言开发也一样,需要拥有一套优秀的编辑、编译及调试工具。

掌握这些工具的使用是至关重要的,它直接影响到程序开发的效率。希望读者通过自己的实践,熟练掌握这些工具的使用。本章主要内容

C语言产生的历史背景

嵌入式Linux下C语言的开发环境

嵌入式Linux下的编辑器vi

嵌入式Linux下的编译器GCC

嵌入式Linux下的调试器GDB

嵌入式Linux下的工程管理器make

如何使用autotools来生成Makefile

嵌入式Linux下的综合编辑器Emacs1.1 嵌入式Linux C语言概述

在嵌入式系统中,应用程序的主体是在宿主机中开发完成的。就嵌入式Linux而言,此过程通常在安装有Linux的宿主机中完成。

本章中介绍的是嵌入式Linux下C语言的开发工具,用户在开发时先在Linux宿主机中对程序进行调试,然后再进行交叉编译。1.1.1 C语言简史

C语言于20世纪70年代诞生于美国的贝尔实验室。在此之前,人们编写系统软件时主要使用汇编语言。

汇编语言编写的程序依赖于计算机硬件,其可读性和可移植性都比较差。而高级语言的可读性和可移植性虽然较汇编语言好,但一般高级语言不具备低级语言能够直观地对硬件实现控制和操作而且执行速度快等特点。

在这种情况下,人们迫切需要一种既具有一般高级语言特性,又具有低级语言特性的语言,于是C语言就应运而生了。

由于C语言既具有高级语言的特点,又具有低级语言的特点,因此迅速普及,成为当今最有发展前途的计算机高级语言之一。C语言既可以用来编写系统软件,也可以用来编写应用软件。现在,C语言已经被广泛地应用于计算机、机械、建筑、电子等各个行业。

C语言的发展历程如下:

C语言最初是美国贝尔实验室的D.M.Ritchie在B语言的基础上设计出来的,此时的C语言只是为了描述和实现UNIX操作系统的一种工作语言。在一段时间里,C语言还只在贝尔实验室内部使用。

1975年,UNIX第6版公布后,C语言突出的优点引起人们的普遍注意。

1977年出现了可移植的C语言。

1978年UNIX第7版的C语言成为后来被广泛使用的C语言版本的基础,被称为标准C语言。

1983年,美国国家标准化协会(ANSI)根据C语言问世以来的各种版本,对C语言进行发展和扩充,并制定了新的标准,称为ANSI C。

1990年,国际标准化组织ISO制定了ISO C标准,目前流行的C语言编译系统都是以它为标准的。1.1.2 C语言特点

C语言兼有汇编语言和高级语言的优点,既适合于开发系统软件,也适合于编写应用程序,被广泛应用于事务处理、科学计算、工业控制、数据库技术等领域。

C语言之所以能存在和发展,并具有强大的生命力,要归功于其鲜明的特点。这些特点是多方面的,归纳如下。

1.C语言是结构化的语言

C语言采用代码及数据分隔的方式,使程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

C语言是以函数形式提供给用户的,这些函数可方便地调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

2.C语言是模块化的语言

C语言主要用于编写系统软件和应用软件。一个系统软件的开发需要很多人经过几年的时间才能完成。一般来说,一个较大的系统程序往往被分为若干个模块,每一个模块用来实现特定的功能。

在C语言中,用函数作为程序的模块单位,便于实现程序的模块化。在程序设计时,将一些常用的功能模块编写成函数,放在函数库中供其他函数调用。模块化的特点可以大大减少重复编程。程序设计时,只要善于利用函数,就可减少劳动量、提高编程效率。

3.程序可移植性好

C语言程序便于移植,目前C语言在许多计算机上的实现大都是由C语言编译移植得到的,不同机器上的编译程序大约有80%的代码是公共的。程序不做任何修改就可用于各种型号的计算机和各种操作系统。因此,特别适合在嵌入式开发中使用。

4.C语言运算符丰富、代码效率高

C语言共有34种运算符,使用各种运算符可以实现在其他高级语言中难以实现的运算。在代码质量上,C语言可与汇编语言媲美,其代码效率仅比用汇编语言编写的程序的代码低10%~20%。1.1.3 嵌入式Linux C语言编程环境

嵌入式Linux C语言程序设计与在其他环境中的C程序设计很类似,也涉及编辑器、编译链接器、调试器及项目管理器的使用。现在我们先对这4种工具进行简单介绍,后面会对其一一进行讲解。

1.编辑器

嵌入式Linux下的编辑器就如Windows下的Word、记事本等一样,完成对所录入字符的编辑功能,最常用的编辑器有vi(vim)和Emacs,它们功能强大,使用方便,本书重点介绍vi。

2.编译链接器

编译过程包括词法、语法和语义的分析;中间代码的生成和优化;符号表的管理和出错处理等。在嵌入式Linux中,最常用的编译器是GCC编译器,它是GNU推出的功能强大、性能优越的多平台编译器。与其他编译器相比,GCC编译的代码的执行效率平均要高20%~30%。

3.调试器

调试器可以方便程序员在程序运行时进行源代码级的调试,但不是代码执行的必备工具。在程序开发的过程当中,调试所消耗的时间远远大于编写代码的时间。因此,有一个功能强大、使用方便的调试器是必不可少的。GDB可以方便地设置断点、单步跟踪等,足以满足开发人员的需要。

4.项目管理器

嵌入式Linux中的项目管理器“make”类似于Windows中Visual C++里的“工程”管理,它是一种控制编译或者重复编译代码的工具。另外,它还能自动管理软件编译的内容、方式和时机,使程序员能够把精力集中在代码的编写上而不是在源代码的组织上。1.2 嵌入式Linux编辑器vi的使用

vi是Linux系统的第一个全屏幕交互式编辑工具。它从诞生至今一直得到广大用户的青睐,历经数十年后仍然是人们主要使用的文本编辑工具,足见其生命力之强,其强大的编辑功能可以同任何一款最新的编辑器相媲美。

虽然用惯了Windows中的Word等编辑器的读者在刚刚接触vi时或多或少会有些不适应,但使用过一段时间后,就能感受到它的方便与快捷。小知识

Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、vi和Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便,而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,从而克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。1.2.1 vi的基本模式

vi编辑器具有3种工作模式,分别是命令行模式(Command Mode)、插入模式(Insert Mode)和底行模式(Last Line Mode),各模式的功能区分如下。

1.命令行模式

在该模式下用户可以输入命令来控制屏幕光标的移动,字符、单词或行的删除,移动复制某区段,也可以进入到底行模式或者插入模式下。

2.插入模式

用户只有在插入模式下才可以进行字符输入,用户按【Esc】键可回到命令行模式下。

3.底行模式

在该模式下,用户可以将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、显示行号等。这一模式下的命令都以“:”开始。

不过在一般使用时,人们通常把vi简化成两个模式,即将底行模式也归入命令行模式中。1.2.2 vi的基本操作

1.进入与离开vi

进入vi可以直接在系统提示符下键入vi <文档名称>,vi可以自动载入所要编辑的文档或是创建一个新的文档。例如,在shell中键入“vi hello.c”(新建文档)即可进入vi画面,如图1.1所示。图1.1 在vi中打开/新建文档

进入vi后,屏幕最左侧会出现波浪符号,只要有该符号就代表该行目前是空的。默认进入的是命令行模式。

要离开vi,可以在底行模式下键入“:q”(不保存离开),“:wq”(保存离开)则是存档后再离开(注意冒号),如图1.2所示。图1.2 在vi中退出文档

2.vi中3种模式的切换

vi的使用中,3种模式的切换是最常用的操作。

在处理的过程中,要时刻注意屏幕左下方的提示。在插入模式下,左下方会有“插入”字样,而在命令行或底行模式下则无提示。

1)命令行模式、底行模式转为插入模式

从命令行模式或底行模式转入到插入模式有3种方法,如表1.1所示。表1.1 命令行模式转到插入模式

在这里,最常用的是“i”,在转入插入模式后如图1.3所示。图1.3 命令模式转入插入模式

2)插入模式转为命令行模式、底行模式

从插入模式转为命令行模式、底行模式比较简单,只需使用【Esc】键即可。

3)命令行模式与底行模式的转换

命令行模式与底行模式间的转换不需要其他特别的命令,只需要直接键入相应模式中的命令键即可。

3.vi的删除、修改与复制

要在vi中进行删除、修改,都可以在插入模式下使用键盘上的方向键及【Delete】键,另外,vi还提供了一系列的操作指令,可以大大简化操作。

这些指令记忆起来比较复杂,希望读者能够配合操作来进行实验。以下命令都是在命令行模式下使用的。

如表1.2所示为vi的删除、修改、复制与粘贴命令。表1.2 vi的删除、修改与复制命令

4.vi的光标移动

由于许多编辑功能都是通过光标的定位来实现的,因此,掌握vi中光标移动的方法很重要。虽然使用方向键也可以实现vi的操作,但vi的指令可以实现复杂的光标移动,只要熟悉以后都非常方便,希望读者都能切实掌握。

如表1.3所示为vi中的光标移动指令,这些指令都是在命令行模式下使用的。表1.3 vi中光标移动的命令

5.vi的查找与替换

在vi中的查找与替换也非常简单,其操作有些类似在Telnet中的使用。其中,查找的命令在命令行模式下,而替换的命令则在底行模式下(以“:”开头),其命令如表1.4所示。表1.4 vi的查找与替换命令

6.vi的文件操作指令

vi中的文件操作指令都是在底行模式下进行的,所有的指令都是以“:”开头的,其命令如表1.5所示。表1.5 vi的文件操作指令1.2.3 vi的使用实例分析

本节给出了一个vi使用的完整实例,通过这个实例,读者一方面可以熟悉vi的使用流程,另一方面也可以熟悉Linux的操作,希望读者能够首先自己思考每一步的操作,再看后面的实例解析答案。

1.vi使用实例内容(1)在/root目录下建一个名为vi的目录。(2)进入vi目录。(3)将文件/etc/passwd复制到当前目录下。(4)使用vi编辑当前目录下的passwd。(5)将光标移到第18行。(6)复制该行内容。(7)将光标移到最后一行行首。(8)粘贴复制行的内容。(9)撤销第8步的动作。(10)将光标移动到最后一行的行尾。(11)粘贴复制行的内容。(12)将光标移到第20行。(13)删除该行。(14)存盘但不退出。(15)将光标移到首行。(16)插入模式下输入“Hello,this is vi world!”。(17)返回命令行模式。(18)向下查找字符串“linux”。(19)向上查找字符串“sys”。(20)强制退出vi,不存盘。

2.vi使用实例解析

在该实例中,每一步的使用命令如下所示。(1)mkdir /root/vi(2)cd /root/vi(3)cp /etc/inittab ./(4)vi ./inittab(5):18(6)yy(7)G(8)p(9)u(10)$(11)p(12):20(13)dd(14):w(15)1G(16)i 并输入“Hello,this is vi world!”(17)按【Esc】键(18)/linux(19)?sys(20):q!1.3 嵌入式Linux编译器GCC的使用1.3.1 GCC概述

作为自由软件的旗舰项目,Richard Stallman在最初编写GCC的时候,只是把它当做一个C程序的编译器,GCC仅意味着GNU C Compiler。

经过多年的发展,GCC除了能支持C语言,目前还支持Ada语言、C++语言、Java语言、Objective C语言、PASCAL语言、COBOL语言,以及支持函数式编程和逻辑编程的Mercury语言等。GCC也不再单指GNU C语言编译器,而是变成了GNU编译器家族。

正如前文中所述,GCC的编译流程分为4个步骤,分别为以下内容:

预处理(Pre-Processing)。

编译(Compiling)。

汇编(Assembling)。

链接(Linking)。

编译器通过程序的扩展名来识别编写源程序所用的语言。由于不同的程序所需要执行编译的步骤是不同的,因此GCC根据不同的扩展名对它们进行相应的处理,如表1.6所示指出了不同扩展名的处理方式。表1.6 GCC所支持扩展名解释1.3.2 GCC编译流程分析

GCC使用的基本语法如下:

这里的option是GCC使用时的一些选项,通过指定不同的选项,GCC可以实现其强大的功能。这里的filename则是GCC要编译的文件,GCC会根据用户所指定的编译选项及文件的扩展名来进行相应的处理。

本节从编译流程的角度讲解GCC的常见使用方法。

先来分析一段简单的C语言程序。该程序由两个文件组成,其中“hello.h”为头文件,在“hello.c”中包含了“hello.h”,其源文件如下所示:

1.预处理阶段

GCC的选项“-E”可以使编译器在预处理结束时就停止编译,选项“-o”是指定GCC输出的结果,其命令格式如下:

表1.6指出扩展名为“.i”的文件是经过预处理的C源程序。要注意,“hello.h”文件是不能进行编译的:

在此处,选项“-o”指定要生成的文件。由表1.6可知,“.i”文件为已经过预处理的C源程序。以下列出了hello.i文件的部分内容:

由此可见,GCC在预处理阶段把“hello.h”的内容添加到了hello.i。

2.编译阶段

编译器在预处理结束之后进行编译。GCC首先要检查代码的规范性、是否有语法错误等,以确定代码实际要做的工作。在检查无误后,就开始把代码翻译成汇编语言,GCC的选项“-S”能使编译器在进行完编译之后就停止。由表1.6可知,“.s”代表汇编语言源程序。因此,此处生成的文件扩展名应设为“.s”:

以下列出了hello.s的内容,可见GCC已经将其转化为汇编语言了。感兴趣的读者可以分析一下这一行简单的C语言小程序用汇编代码是如何实现的:

可以看到,这一小段C语言的程序在汇编中已经复杂很多了,这也是C语言作为高级语言的优势所在。

3.汇编阶段

汇编阶段是把编译阶段生成的“.s”文件生成目标文件,在此使用选项“-c”就可看到汇编代码已转化为“.o”的二进制目标代码了,如下所示:

4.链接阶段

在成功编译之后,就进入了链接阶段。这里涉及一个重要的概念:函数库。

在这个程序中并没有定义“printf”的函数实现,在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现。那么,是在哪里实现“printf”函数的呢?

最后的答案是:系统把这些函数实现都已经放入名为libc.so.6的库文件中去了。在没有特别指定时,GCC会到系统默认的搜索路径/lib或/usr/lib下进行查找。找到libc.so.6后对需要的函数进行处理,这样就能在程序执行时调用函数“printf”,而这也就是链接的作用。

完成了链接之后,GCC就可以生成可执行文件,其命令如下所示:

运行该可执行文件,出现正确的结果:1.3.3 GCC警告提示

本小节主要讲解GCC的警告提示功能。GCC包含完整的出错检查和警告提示功能,它们可以帮助Linux程序员写出更加专业和高效的代码。

千万不要忽视这些警告信息,在很多情况下,含有警告信息的代码往往会有意想不到的运行结果。

读者可以先阅读以下代码:

虽然这段代码运行的结果是正确的,但还有以下问题:

ain函数的返回值被声明为void,但实际上应该是int。

使用了GNU语法扩展,即使用long long来声明64位整数,不符合ANSI/ISO C语言标准。

main函数在终止前没有调用return语句。

GCC的警告提示选项有很多种类型,主要可分为Wall类和非Wall类。

1.Wall类警告提示

这一类警告提示选项占了GCC警告选项的90%以上,它不仅包含打开所有警告等功能,还可以单独对常见错误分别指定警告。这些常见的警告选项如表1.7所示(这些选项可供读者在实际操作时查阅使用)。表1.7 GCC的Wall类警告提示选项续表

这些警告提示读者可以根据自己的不同情况进行相应的选择,这里最为常用的是“-Wall”,上面的这一小段程序使用该警告提示后的结果是:

可以看出,使用“-Wall”选项找出了未使用的变量tmp以及返回值的问题,但没有找出无效数据类型的错误。

2.非Wall类警告提示

非Wall类的警告提示中最为常用的两种是“-ansi”和“-pedantic”。

1)-ansi

该选项强制GCC生成标准语法所要求的告警信息,尽管这还并不能保证所有没有警告的程序都是符合ANSI C标准的。使用该选项的运行结果如下所示:

可以看出,该选项并没有发现“long long”这个无效数据类型的错误。

2)-pedantic

该选项允许发出ANSI C标准所列的全部警告信息,同样也保证所有没有警告的程序都是符合ANSI C标准的。使用该选项的运行结果如下所示:

可以看出,使用该选项发现了“long long”这个无效数据类型的错误。1.3.4 GCC使用库函数

1.Linux函数库介绍

函数库可以看做是事先编写的函数集合,它可以与主函数分离,使得程序模块化,从而增加代码的复用性。Linux中函数库包括两类:静态库和共享库。

静态库的代码在编译时就已连接到开发人员开发的应用程序中,而共享库是在程序开始运行时被加载的。

由于在使用共享库时程序中并不包括库函数的实现代码,只是包含了对库函数的引用,因此程序代码的规模比较小。

系统中可用的库都安装在/usr/lib和/lib目录下。库文件名由前缀lib和库名以及扩展名组成。根据库的类型不同,扩展名也不一样。注意

共享库的扩展名由.so和版本号组成。

静态库的扩展名为.a。

例如,数学共享库的库名为libm.so.5,这里的标识字符为m,版本号为5,libm.a则是静态数学库。在Linux系统中系统所用的库都存放在/usr/lib和/lib目录中。

2.相关路径选项

有些时候库文件并不存放在系统默认的路径下。因此,要通过路径选项来指定相关的库文件位置,这里首先介绍两个常用选项的使用方法。

1)-I

GCC使用默认的路径来搜索头文件,如果想要改变搜索路径,

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载