静态库的制作与使用(包含测试例子)

/*********************************************************************
* Author : Samson
* Date : 06/30/2012
* Test platform:
* GNU Linux version 2.6.29.4
* gcc version 4.4.0 20090506 (Red Hat 4.4.0-4) (GCC)

* *******************************************************************/

在传统的静态程序库中,生成的代码通常封装在一个程序库文件中(其名称以 .a 结尾),

linux下静态库的建立与使用,一般都是采用ar命令进行制作,ar crv 生成的静态库名 生成的可执行程序1 生成的可执行程序2……
下面就编写一个简单的示例程序,来更清楚的了解一下制作一个静态链接库的过程。

先定义一个头文件test1.h,内容如下:
#include <stdlib.h>
#include <stdio.h>

void test1();
void test2();

再分别建立两个C文件,一个为test1ForStaticDll.c,内容如下:
#include "test1.h"

void test1()
{
printf("this is test1\n");
}
一个为test2ForStaticDll.c, 内容如下:
#include "test1.h"

void test2()
{
printf("this is test2\n");
}
分别生成这两个C文件的目标文件,命令行如下:
gcc -c test1ForStaticDll.c -o lib_test1.o
gcc -c test2ForStaticDll.c -o lib_test2.o
使用nm命令分别查看编译生成的两个目标程序,如下:
[root@UFO dlltest]# nm lib_test1.o
U puts
00000000 T test1
[root@UFO dlltest]# nm lib_test2.o
U puts
00000000 T test2
然后使用ar把这两个目标程序打包成一个静态链接库文件,如下:
ar crv libtest.a lib_test1.o lib_test2.o
命令行中的crv参数分别表示:
c:创建一个静态链接库
r:表示把目标插入到静态链接库文件中
v:打印出创建过程中的相关信息
再使用nm命令查看打包后的静态链接库文件中包含的函数符号信息,如下:
[root@UFO dlltest]# nm libtest.a

lib_test1.o:
U puts
00000000 T test1

lib_test2.o:
U puts
00000000 T test2

以上是生成一个静态库的全过程,下面我们再编写一个测试文件testDll.c文件,内容如下:
#include "test1.h"

int main()
{
test1();
test2();
printf("this is main\n");
return 0;
}
编译测试文件testDll.c,编译命令行为:
gcc -o testdll.out testDll.c libtest.a
然后执行生成的可执行程序testdll.out, 执行结果如下:
[root@UFO dlltest]# ./testdll.out
this is test1
this is test2
this is main


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值