Linux程序库的构建和使用
在本文里,我们将探索与Linux的程序库有关的知识.,我们考察静态库的基本知识,并介绍如何使用ar命令来建立静态库.然后,我们将学习共享库方面的知识,并讲述可以动态加载的共享库的有关内容. 一、什么是程序库 通俗的讲,一个程序库就是目标程序文件的一个集合.如果某些目标文件提供了解决一个特定问题的所需功能,我们就可以把这些目标文件归并为一个程序库,从而让应用开发者更易于访问这些目标文件,省得到处去找. 对于静态库,我们可以用实用程序ar来建立.当应用程序开发人员利用程序库进行程序的编译和连接时,程序库中为应用程序所需的那些元件就会集成到最终生成的的可执行程序中.之后,程序库已经融入应用程序的映像之中,成为它密不可分的一部分了,对应用程序来说,已经没什么外部的程序库可言了. 共享程序库(或者动态程序库)也会连接到一个应用程序的映像上,不过需要两个不同的步骤.第一步发生在构建应用程序之时,链接程序检查是否在应用程序或者程序库内部找到了构建应用程序所需的全部符号(函数名或变量名).第二步发生在运行时,动态加载器把所需的共享库载入内存,然后动态地把它链接到应用程序的映像之中.注意,这里与静态程序库不同,这次并没有把共享程序库中的所需元件放入应用程序的映像之中.很明显,这样生成的应用程序映像较小,共享程序库和应用程序的映像是相互独立的,如下图所示.
图1 静态库示意图
图2 动态库示意图 虽然共享库能够节约内存,但是这是有代价的——在运行时解析程序库.很明显,要想弄清需要哪些库,然后寻找这些库并将其载入内存肯定是需要一定时间的. 本文中,我们会建立两个程序库,一个静态库和一个动态库,并以各自的方式应用于程序之中,以此亲身体验两者之间的区别.
二、静态库的创建和使用 相对于动态链接库,静态库要简单一些,它被静态的链接到应用程序的映像之中.这意味着,映像一旦建好,外部程序库的有无对映像的执行将毫无影响,所需的部分已经放进程序二进制映像了. 下面我们来演示如何用一组源文件来构造一个程序库.我们建立的程序库是用来封装GNU/Linux的随机函数的,这样我们的库就可以对外提供随机数生成器了.现在看一下我们的程序库为应用程序提供的接口(API),我们将其放在头文件randapi.h中,如下所示:
我们的应用程序接口由三个函数构成,第一个函数是initrand(),这是一个初始化函数,它的任务是为使用程序库做好必要的准备,在调用所有其他随机函数之前,调用这个初始化函数.第二个函数getSRand()的作用是随机返回一个浮点数,其值介于0.0到1.0之间.一个函数是getRand(x),它返回一个随机整数,其值介于0到(x-1)之间. 在文件initrand.c中,放的是初始化函数initrand()的实现代码,这个函数使用当前时间作为种子值来初始化随机数生成程序.代码如下所示:
文件randapi.c是我们一个实现API的文件,它也提供了一个随机数函数,源代码如下所示:
|
|||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |