1.库的概念:库是一种可执行的二进制形式;
2.分类:
1》静态库
①、在程序编译时会被连接到目标代码中;
②、程序运行时不再需要该静态库;
③、体积较大;
2》动态库/共享库
①、在程序编译时不会被连接到目标代码中,而是在程序运行时才被载入内存中;
②、在程序运行时需要动态库存在;
③、代码体积较小;
3.库的制作:
1》静态库的制作:
①、创建静态库的源代码:
testlib.c
int fun(int a){
return a * a;
}
②、将静态库的源代码编码成.O文件
gcc -c -o testlib.a testlib.o
③、将.o文件制作成静态库
ar crs libtest.a libtest.o
④、测试静态库是否创建成功
#include <stdio.h>
#include "testlib.h"
int main(void){
int n;
scanf("%d", &n);
printf("%d\n", fun(n));
}
编译上面的代码:gcc -o main main.c -ltest -L.
执行:./main
2》动态库的制作:
①、创建动态库的源代码:
testlib.c
int fun(int a){
return a*a;
}
②、将动态库的源代码编程成.o文件:testlib.o
gcc -fPIC -Wall -c testlib.c
③、将.o文件制作成动态库;libtest.so
gcc -shared -fPIC -o libtest.so testlib.o
④、测试动态库libtest.a是否创建成功
#include <stdio.h>
#include "testlib.h"
int main(void)
{
int n;
scanf("%d", &n);
printf("%d\n", fun(n));
}
----->>编译上面的测试代码:gcc -o main main.c -ltest -L.
----->>装载动态库:
---------------------》》第一种方法:将动态库放入系统库目录下:
sudo cp libtest.so /lib
---------------------》》第二种方法:将动态库路径加入到库的配置文件:/etc/ld.so.conf.d/libc.conf
----》打开配置文件:sudo vi /etc/ld.so.conf.d/libc.conf
----》写入库路径:
----》使之生效:sudo ldconfig
--------------------》》第三种方法:将动态库路径加入到环境变量中
export LD_LIBRARY_PATH=动态库的路径
--------------------》》执行:./main