快速业务通道

Linux程序库的构建和使用

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-07

这就是我们的API了,注意,initapi.c和randapi.c的函数原型都放在了同一个头文件中,即randapi.h.当然,我们完全可以在单个文件中来实现这些功能,但是为了示范程序库的建立,我们故意将它们放到不同的文件中.

现在,我们在来看一下使用这些API的测试程序,该程序将使用我们的程序库提供的应用编程接口进行工作.这个应用程序通过计算随机数函数返回的的平均值来快速检验API,平均值应该在随机数范围的中间附近.该程序的代码如下所示:

//test.c,测试我们的程序库的API的应用程序.
#include "randapi.h"

#define ITERATIONS 1000000L

int main()
{
long i;
long isum;
float fsum;

/*初始化随机数API*/
initRand();

/*计算getRand(10)的返回值的平均数*/
isum = 0L;
for (i = 0 ; i < ITERATIONS ; i )
{

isum = getRand(10);

}

printf( "getRand() Average %dn", (int)(isum / ITERATIONS) );

/* 计算getSRand()返回值的平均数*/
fsum = 0.0;
for (i = 0 ; i < ITERATIONS ; i )
{

fsum = getSRand();

}

printf( "getSRand() Average %fn", (fsum / (float)ITERATIONS) );

return;
}

通过下列命令,可以编译所有源文件并将其综合成单个映像:

$ gcc initapi.c randapi.c test.c -o test

上述gcc命令将编译三个文件,并把它们连接成单个映像,该映像名为test.运行该映像时,我们将看到各随机数函数的平均值:

$ ./test

getRand() Average 4
getSRand() Average 0.500003

$

我们看到,结果和预期的一样,产生的随机数的平均值正好在随机数范围的中间值附近.然而,我们想要的可不是把所有源代码编译成单个映像,而是建立一个随机数函数库.别急,我们现在就开始使用ar实用程序来达到此目.您可以通过下面的命令,在获得最终的二进制映像的同时,还会生成我们的第一个静态库.

$ gcc -c -Wall initapi.c
$ gcc -c -Wall randapi.c
$ ar -cru libmyrand.a initapi.o randapi.o

$

这里,我们使用gcc编译了两个源文件initapi.c和randapi.c,其中-c选项是告诉gcc仅编译而不链接,并开启所有警告.接下来,我们使用ar命令来生成咱们的程序库libmyrand.a.其中cru选项是创建或者添加存档时的标准设置,c选项表示要建立静态库,如果静态库早已存在,则忽略该选项.选项r的作用是让ar替换静态库中的现有目标,当然是它们业已存在的话.

,选项u的作用是为保险起见,只有当新生成的目标文件比存档中原有的目标文件要新时才替换同名的目标文件.

如今,我们已经得到了一个名为libmyrand.a的新文件,它就是我们想要的静态库.该静态库中存有两个目标程序,即initapi.o和randapi.o.那么,我们如何利用这个静态库来构建应用程序呢?别急,继续往下看.方法很简单,如下所示:

$ gcc test.c -L. -lmyrand -o test

$ ./test
getRand() Average 4
getSRand() Average 0.499892
$

这里,我们使用gcc来编译test.c,然后利用libmyrand.a连接目标程序test.o,这样就得到了可执行文件.选项-L.的作用是告诉gcc,程序库在当前子目录中.(这里的点号.表示目录).

注意,我们也可以为程序库指定具体的子目录,如-L/usr/mylibs.选项-L用来标识要用的程序库.还要留意的是,这里的myrand并不是我们的程序库的名称,我们的程序库的名称是libmyrand.a.使用-L时,系统会替我们在指定的名称的前后分别加上lib和.a,因此,如果我们在此规定-ltest的话,系统将查找名为libtest.a的程序库.

我们已经了解了创建程序库以及使用它来构建应用程序的方法,现在让我们继续探讨一下ar程序的用法.我们可以通过-t选项来调查静态库中到底包含了哪些内容,如下所示:

$ ar -t libmyrand.a
initapi.o
randapi.o
$

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号