一、静态库的创建
静态库(name.a):是一系列 .o文件的归档文件。在代码编译时遇到静态库的链接,链接器会连接到静态库,直接将静态库的代码直接复制到该程序中。
- 预先创建好要导入静态库的代码,保存为.c文件(如 un.c)
$ vim un.c //进入vim命令界面,按i/a进入编辑。输入完成后Esc返回命令界面,输入 :wq保存并退出。
- 使用gcc编译成.o文件,代码如下:
$ gcc -c un.c //执行后,在此文件夹内会生成一个汇编后的.o文件(un.o),可用 ls 查看。
- 使用归档工具ar将目标文件归档在一起,创建静态库:
$ ar rcsv libname.a un.o
a - un.o //静态库创建成功,目录下生成libname.a文件。
- 在另外一个需要链接到该函数的.c文件编译时,要指明静态库的路径,使用代码如下:`
gcc -o test un.c -L. -lname //生成可执行文件test.`
- 使用函数:
./test
二、动态库的创建
动态库(name.so):在程序编译时不会被链接到目标代码中,而是在程序运行时才被载入。
- 使用gcc的 -fPIC 创建一个目标文件(.o),代码如下:
$ gcc -fPIC -Wall -c un.c //生成un.o ;
- 使用 -shared 选项生成一个动态库 libt.so,代码如下:
$ gcc -shared -o test1 t.c -L. -lname //生成libt.so文件;
- 需手动注册动态库文件名,一种方法为:直接将生成的 libt.so 文件移动或复制到 /usr/lib 文件夹下即可。代码为:
mv libt.so /usr/lib
- 编译含有该函数的主程序,将链接到以上创建的动态库,其操作和静态库一致,代码为:
$ gcc -o test1 un.c -L. -lname //生成可执行文件test.`
- 使用该函数:
$ ./test1