1、制作静态链接库
第一步:demo.c demo.h
/* demo.c */
#include <stdio.h>
void func1(void)
{
printf("func1 in demo.c.\n");
}
int func2(int a,int b)
{
printf("func2 in demo.c.\n");
return a+b;
}
/*demo.h*/
void func1(void);
int func2(int a, int b);
第二步:制作静态库
gcc -c demo.c -o demo.c
ar -rc libdemo.a demo.o
使用gcc -c 只编译不连接,生成.o文件。然后使用ar工具打包成.a归档文件。库名不能随便乱起,一般是lib+库名称,后缀名是.a表示一个归档文件。
第三步:制作出静态库后,发布时需要发布.a文件和.h文件。
2、使用静态库
把.a文件和.h文件都放在需要引用的文件夹下。
/* test.c */
#include "demo.h"
#include <stdio.h>
int main(void)
{
func1();
int a = func2(4, 5);
printf("a = %d.\n",a);
return 0;
}
编译:
gcc test.c -o test -ldemo -L.
当使用-lxxx时,链接器试图在默认的链接库路径去寻找libxxx.a文件,但是libdemo.a文件放在了当前路径,找不到。所以-L是指定链接器在哪个目录下寻找的库文件,句号.表示当前路径。
3、nm命令
nm命令用来查看一个.a文件中都有哪些符号,如:
book@book-desktop:/work/c_test$ nm libdemo.a
demo.o:
00000000 T func1
00000014 T func2
U puts