本质上来说库是一种可执行代码的二进制形式。
linux下的库有两种:静态库和共享库(动态库)
静态库在程序编译时会被连接到目标代码中:程序运行时将不再需要该静态库,因此体积较大。
优点:程序运行时将不再需要该静态库
缺点:可执行文件的体积较大。
相同的库可能会需要被多次加载。
静态库: libxxxxx.a
动态库:动态库在程序编译时并不会被连接到目标代码中,
优点: 在程序运行时动态库才会被载入内存,因此代码体积较小。
缺点: 因此在程序运行时还需要动态库存在。
静态库的制作:将功能函数编译成库。
1、先生成目标文件
gcc -c -Wall fun.c -o fun.o
2、ar crs libfun.a fun.o
将fun.o文件 打包生成libfun.a的静态库
库的命名:lib库名.a
使用:
-L:指定库的路径
-l :指定需要连接的库的名字
gcc test.c -o test -L . -lfun
动态库的制作和使用:
1、需要生成目录文件
gcc -c -fPIC -Wall fun.c -o fun.o
fPIC:说明库可以被加载到内存的任意位置
2、gcc -Wl,-soname,libfun.so -shared fun.o -o libfun.so.1
-Wl,-soname,libfun.so 需要连接的库
libfun.so.1 实际生成的库。
库的命名:lib库名.so
3、 ln -s 绝对路径/libfun.so.1 libfun.so
4、gcc test.c -o test -L . -lfun
共享库的加载方法:
1、动态库需要被放置到/usr/lib 或者 /lib目录下。
只需要将软连接移动过去。
2、将库的路径添加到系统环境变量中
LD_LIBRARY_PATH
exprot LD_LIBRARY_PATH=库的路径
3、将库的路径添加到 /etc/ld.so.conf/xxx.conf 的配置文件中
sudo ldconfig 来重启配置文件