这篇文章讲解了如何生成静态库,以及如何与静态库链接。
了解如何生成以及链接静态库,需要对gcc/g++有所了解,这里提供一些资料
交叉编译必知--gcc/g++详细讲解
在演示之前,准备3个文件,分别为ctest1.c,ctest2.c和prog.c。
ctest1.c文件
void ctest1(int *i)
{
*i=5;
}
ctest2.c文件
void ctest2(int *i)
{
*i=100;
}
prog.c文件
#include <stdio.h>
void ctest1(int *);
void ctest2(int *);
int main()
{
int x;
ctest1(&x);
printf("Valx=%d\n",x);
return 0;
}
我们的目的是将ctest1.c和ctest2.c文件打包成.a库,然后让prog这个文件链接到.a这个库。
1.执行编译
cc -Wall -c ctest1.c ctest2.c
会生成2个文件:ctest1.o ctest2.o
2.创建生成库
ar -cvq libctest.a ctest1.o ctest2.o
生成静态文件使用ar
,这里生成的静态文件为libctest.a
3.列出库中的文件
ar -t libctest.a
ctest1.o ctest2.o
4.与库链接
有两种方式可以与库链接
cc -o 可执行文件名称 prog.c libctest.a
cc -o 可执行文件名称 prog.c -L/path/to/library-directory -lctest
这里使用第二种,因为这个库不是放在系统默认的目录下的
cc -o prog prog.c -L/home/cuiboye/test -lctest
执行prog这个可执行程序,可以看到输出
Valx=5
至此,我们成功的将C文件编译成了.a静态库,以及其它的文件链接这个.a静态库。
网友评论