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

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

/*********************************************************************
 * 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