Linux上的静态库,其实是目标文件的归档文件。
在Linux上创建静态库的步骤如下:
下面通过实例具体讲解。
第一个源文件 my_print.c
源文件2: my_math.c
使用gcc,为这两个源文件生成目标文件:
我们就得到了 my_print.o 和 my_math.o。
我们使用 ar 将目标文件归档:
我们就得到了libmylib.a,这就是我们需要的静态库。
上述命令中 crv 是 ar的命令选项:
通过 ar t libmylib.a 可以查看 libmylib.a 中包含的目标文件。
可以通过 ar --help 查看更多帮助。
注意:我们要生成的库的文件名必须形如 libxxx.a ,这样我们在链接这个库时,就可以用 -lxxx。
反过来讲,当我们告诉编译器 -lxxx时,编译器就会在指定的目录中搜索 libxxx.a 或是 libxxx.so。
头文件定义了 libmylib.a 的接口,也就是告诉用户怎么使用 libmylib.a。
生成my_lib.h, 内容如下:
在同样的目录下,建立 test.c:
这个源文件中引用了 libmylib.a 中的 cout 和 add 函数。
编译test.c:
将会生成a.out,通过 ./a.out 可以运行该程序。说明我们的静态库能正常工作。
上面的命令中 -L. 告诉 gcc 搜索链接库时包含当前路径, -lmylib 告诉 gcc 生成可执行程序时要链接 libmylib.a。
上面的步骤很繁琐,还是写个简单的makefile吧,内容如下:
makefile写好后,运行 make build 将会构建 libmylib.a, 运行 make test 将会生成链接 libmylib.a 的程序。
如果你在 Windows 上使用 mingw,和Linux下生成静态库的方法是一样的。