linux构建静态库并测试


linux中静态库(.a)和动态库(.so).静态库文件是归档文件(archives).由ar生成.
构建静态库大致步骤如下:

  1. 编写库函数源代码,使用gcc编译为.o目标文件.

  2. 使用ar命令将目标文件归档为.a文件.

  3. 为库编写头文件.

  4. 编写代码测试.

编写源码并编译为目标文件

mylib.c:

1
2
3
4
5
6
7
8
#include<stdio.h>
int mylib(void)
{
printf("SUCCESSFUL!\n");
return 0;
}

编译为目标文件:

1
gcc -c mylib.c -o mylib.o

构建为归档文件

使用ar命令将mylib.o归档为归档文件:

1
ar -cqv libmylib.a mylib.o

  • ar的参数c为创建(create)新的归档文件,q为添加(quick append)新的文件到归档文件中,v显示处理过程。使用man arar -h查看更多关于ar的使用。
  • 可用ar -t libmylib.a查看libmylib.a归档文件中包含的文件.

  • 静态库文件必须命名为lib***.a,因为使用gcc *.c -l***链接静态库编译的时候,编译器会到特定目录搜索lib***.a文件或lib***.so文件.

为库编写头文件

告诉用户如何使用mylib.a静态库.

mylib.h:

1
2
3
4
5
6
#ifndef __MY_LIB_H__
#define __MY_LIB_H__
int mylib(void);
#endif

编写测试文件测试

test.c:

1
2
3
4
5
6
7
8
#include <mylib.h> //包含头文件mylib.h
int main(void)
{
mylib();
return 0;
}

编译:

1
gcc -L. -I. test.c -lmylib -o test

  • -L <dir>参数指示编译器从特定目录搜索库文件,L后跟目录,中间可有空格也可以没有空格,这里.指当前目录。
  • -lmylib指示编译器链接libmylib.alibmylib.so库文件.这里是libmylib.a.
  • -I <dir>参数指示编译器从特定目录搜索头文件,I后跟目录,中间可有空格也可以没有空格,这里.指当前目录。

测试./test

1
SUCCESSFUL!

写个Makefile实现自动化

Makefile:

1
2
3
4
5
6
7
8
9
10
11
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

Done!

0%