首页 | 路由技术 | 交换技术 | 接入技术 | 综 合布线 | 网络管理 | 网络安全 | 操作系统 | 实用技巧 | 业界动态
最 新咨询 | 网络编程 | 软件编程 | 脚本技术 | 网页制作 | 网站技巧 | 数据库  | 精品收藏 | 免费资源 | 在线书店
当前位置: 首页 >天空618-IT技术 >实用技巧 >应用技巧 >正文
关键字: 模糊搜索:

Linux程序库的构建和使用

发布时间:08-07-08 16:27:45      来源:天空618-IT技术     作者:admin
最新报道

一、什么是程序库

    通俗的讲,一个程序库就是目标程序文件的一个集合。如果某些目标文件提供了解决一个特定问题的所需功能,我们就可以把这些目标文件归并为一个程序库,从而让应用开发者更易于访问这些目标文件,省得到处去找。

    对于静态库,我们可以用实用程序ar来建立。当应用程序开发人员利用程序库进行程序的编译和连接时,程序库中为应用程序所需的那些元件就会集成到最终生成的的可执行程序中。之后,因为程序库已经融入应用程序的映像之中,成为它密不可分的一部分了,所以对应用程序来说,已经没什么外部的程序库可言了。

    共享程序库(或者动态程序库)也会连接到一个应用程序的映像上,不过需要两个不同的步骤。第一步发生在构建应用程序之时,链接程序检查是否在应用程序或者程序库内部找到了构建应用程序所需的全部符号(函数名或变量名)。第二步发生在运行时,动态加载器把所需的共享库载入内存,然后动态地把它链接到应用程序的映像之中。注意,这里与静态程序库不同,这次并没有把共享程序库中的所需元件放入应用程序的映像之中。很明显,这样生成的应用程序映像较小,因为共享程序库和应用程序的映像是相互独立的,如下图所示。

   

图1  静态库示意图

 

图2  动态库示意图

    虽然共享库能够节约内存,但是这是有代价的——必须在运行时解析程序库。很明显,要想弄清需要哪些库,然后寻找这些库并将其载入内存肯定是需要一定时间的。

    本文中,我们会建立两个程序库,一个静态库和一个动态库,并以各自的方式应用于程序之中,以此亲身体验两者之间的区别。
二、静态库的创建和使用

    相对于动态链接库,静态库要简单一些,它被静态的链接到应用程序的映像之中。这意味着,映像一旦建好,外部程序库的有无对映像的执行将毫无影响,因为所需的部分已经放进程序二进制映像了。

    下面我们来演示如何用一组源文件来构造一个程序库。我们建立的程序库是用来封装GNU/Linux的随机函数的,这样我们的库就可以对外提供随机数生成器了。现在看一下我们的程序库为应用程序提供的接口(API),我们将其放在头文件randapi.h中,如下所示:

   
 //randapi.h,我们的程序库的接口

#ifndef __RAND_API_H
#define __RAND_API_H

extern void initRand( void );
extern float getSRand( void );
extern int getRand( int max );

#endif /* __RAND_API_H */

    我们的应用程序接口由三个函数构成,第一个函数是initrand(),这是一个初始化函数,它的任务是为使用程序库做好必要的准备,在调用所有其他随机函数之前,必须首先调用这个初始化函数。第二个函数getSRand()的作用是随机返回一个浮点数,其值介于0.0到1.0之间。最后一个函数是getRand(x),它返回一个随机整数,其值介于0到(x-1)之间。

    在文件initrand.c中,放的是初始化函数initrand()的实现代码,这个函数使用当前时间作为种子值来初始化随机数生成程序。代码如下所示:

   
 //initrand.c,初始化函数initrand()的源代码
#include <stdlib.h>
#include <time.h>

//initRand()用于初始化随机数生成器

void initRand()
{
time_t seed;
seed = time(NULL);
srand( seed );
return;
}

9 7 3 1 2 3 4 4 8 :


·上一篇文章:
·下一篇文章:
[ 返回上一页 ]字体[  ] [ 打印 ] [ 发送好友:发送给好友 ][ 加入收藏:加入收藏夹 ]
 
发表评论 ?
  相关文章
相关文章

无相关新闻

最新文章
· Linux程序库的构建和使用 
· 如何实现Linux操作系统最小化 
· 影响企业成本和生产率的10大IT问
· 巾帼不让须眉 IT界10大女性CEO排
· 广东电信未清查家庭一拖N 目标是
· IBM抑郁员工绝食抗议 事件全程追
· 八国集团争辩是否邀中印加入 法国
· Windows安全补丁下载七大绝招横评
· 制作“百毒不侵”的Windows系统
· 让Windows XP不再出现内存读写错
· 在XP下直接修改硬盘分区容量
· 双击盘符打不开盘的解决方法
· Google屈服外界压力 首页添加隐私
· IBM输了郁症官司 但要求员工回家
· 三联集团董事长张继升:国美“空
· 宝典:路由器一般故障到特殊故障
· 一个互联网先行者歧路:雅虎失意
· 调查:Windows Server 2008受到I
· 《纳尼亚传奇2:凯斯宾王子》全球
· 自己动手 Java分页Bean