linux构建静态库并测试
Posted
 
        linux中静态库(.a)和动态库(.so).静态库文件是归档文件(archives).由ar生成.
构建静态库大致步骤如下:
- 
编写库函数源代码,使用gcc编译为 .o目标文件.
- 
使用 ar命令将目标文件归档为.a文件.
- 
为库编写头文件. 
- 
编写代码测试. 
编写源码并编译为目标文件
mylib.c:
#include<stdio.h>
int mylib(void)
{
	printf("SUCCESSFUL!\n");
	return 0;
}
编译为目标文件:
gcc -c mylib.c -o mylib.o
构建为归档文件
使用ar命令将mylib.o归档为归档文件:
ar -cqv libmylib.a mylib.o
- 
ar的参数c为创建(create)新的归档文件,q为添加(quick append)新的文件到归档文件中,v显示处理过程。使用man ar或ar -h查看更多关于ar的使用。
- 
可用 ar -t libmylib.a查看libmylib.a归档文件中包含的文件.
- 
静态库文件必须命名为 lib***.a,因为使用gcc *.c -l***链接静态库编译的时候,编译器会到特定目录搜索lib***.a文件或lib***.so文件.
为库编写头文件
告诉用户如何使用mylib.a静态库.
mylib.h:
#ifndef __MY_LIB_H__
#define __MY_LIB_H__
int mylib(void);
#endif
编写测试文件测试
test.c:
#include <mylib.h>   //包含头文件mylib.h
int main(void)
{
	mylib();
	return 0;
}
编译:
gcc -L. -I. test.c -lmylib -o test
- -L <dir>参数指示编译器从特定目录搜索库文件,L后跟目录,中间可有空格也可以没有空格,这里- .指当前目录。
- -lmylib指示编译器链接- libmylib.a或- libmylib.so库文件.这里是- libmylib.a.
- -I <dir>参数指示编译器从特定目录搜索头文件,I后跟目录,中间可有空格也可以没有空格,这里- .指当前目录。
测试./test:
SUCCESSFUL!
写个Makefile实现自动化
Makefile:
test:libmylib.a test.c
	gcc -L. -I. test.c -lmylib -o test
libmylib.a:mylib.o
	ar -cqv libmylib.a mylib.o
mylib.o:mylib.c
	gcc -c mylib.c -o mylib.o
clean:
	rm *.o *.a test