- 自己制作静态链接库
首先使用gcc -c只编译不连接,生成.o文件,然后使用ar工具进行打包成.a归档文件。
1.1 建立一个源文件和头文件
.C文件:
#include <stdio.h>
void func1(void)
{
printf("run staticlib.\n");
}
int func2(int a, int b)
{
return a+b;
}
.h文件
void func1(void);
int func2(int a, int b);
1.2 制作一个Makefile
all:
gcc kanggo.c -o kanggo.o -c
ar -rc libkanggo.a kanggo.o
这里的-c代表只编译不连接。ar工具进行打包.a归档文件,-rc是创建的意思(连接kanggo.o创建libkanggo.a)
1.3 使用静态链接库
把libkanggo.a 和kanggo.h都放到引用的文件件下,然后建立一个test.c文件,文件中包含库的kanggo.h,然后直接使用库函数。
编译方法: gcc test.c -o test -lkanggo -L.
注:-lkanggo表示连接到此库。
-L.表示当前路径
运行结果:
run staticlib.
func2 = 10.
1.4 nm命令的使用
除了ar命令外,还有个nm命令也很有用,它可以用来查看一个.a文件中都有哪些符号。
比如执行: nm kanggo.a
运行结构:
kanggo.o:
00000000 T func1
00000014 T func2
U puts
- 制作动态链接库
2.1 动态链接库后缀是.so(对应windows系统的dll),静态库的扩展名是.a。
2.2 第一步 创建一个动态链接库
gcc kanggo.c -o kanggo.o -c -fPIC
gcc -o kanggo.so kanggo.o -shaerd
-fPIC是位置无关码,-shared是按照共享库的方式来链接。
注意:发布的时候,只有libxxx.so和xxx.h即可。
2.3 第二步:使用自己创建的共享库
编译方法:
gcc test.c -o test -lkanggo -L.
但是在执行的时候会提示找不到库。
解决办法一: 将libkang.so放到固定目录下。
这个固定目录在/usr/lib目录下。
解决办法二:使用环境变量:LD_LIBRARY
命令:export LD_LIBRARY_PATH:(动态库的决定路径)