前言
将函数封装成库不仅有利于代码的复用, 还可以在不公开源码的情况下给他人使用函数的功能。本文记录了Windows下使用gcc制作静态库与动态库的过程。
一、测试代码编写
测试函数为一个加法函数,它将被制作成静态库与动态库,并被函数main()
调用。各个文件如下所示,它们被放在同一个目录下。
-
add.h
int add(int a, int b);
-
add.c
#include "add.h" int add(int a, int b) { return a + b; }
-
main.c
#include <stdio.h> #include "add.h" int main() { int a = 10; int b = 20; int c; c = add(a, b); printf("c = %d\n", c); return 0; }
二、 静态库的制作与使用
-
打开
cmd
, 使用gcc编译add.c
,生成add.o
gcc -c add.c
-
使用ar命令生成静态库
libadd.a
ar -cr libadd.a add.o
-
使用gcc编译
main.c
,生成可执行文件gcc main.c libadd.a -o test.exe or gcc main.c -ladd -L./ -o test.exe
完成静态库的制作后,只需库文件
libadd.a
、头文件add.h
与调用程序main.c
参与编译,不再需要源文件add.c
。注意:在命令
gcc main.c -ladd -L./ -o test.exe
中,-l
代表使用的库,由于编译器会按照lib<库名>.a
的规则进行搜索,因此这里只需要给出add
即可,-L
用来指定附加库文件的搜索路径,此处.\
代表当前目录。 -
执行
test.exe
测试test.exe
上述命令的执行过程如下图所示:
三、动态库的制作与使用
-
打开
cmd
,执行以下命令,生成动态库libadd.so
gcc -shared -fpic add.c -o libadd.so
-
使用gcc 编译
main.c
gcc main.c libadd.so -o test.exe
-
执行
test.exe
测试test
上述命令的执行过程如下图所示:
注意:由于动态库在程序执行时才被加载,所以如果将动态库libadd.so
删除的话,那test.exe
就无法执行了。
至此,静态库、动态库的制作与使用就完成了,欢迎大家交流指正~