静态库的制作和使用
命名:libXXX.a(Linux),libXXX.lib(Windows)
制作:(1)制作.o文件
gcc -c XXX.c XXX.c
(2)将.o文件打包,使用ar工具
ar rcs libXXX.a XXX.o XXX.o
(3)编译和链接
gcc XXX.c -o XXX -l calc -L库的路径 -I头文件路径
动态库的制作和使用
命名:libXXX.so(Linux),libXXX.dll(Windows)
制作:(1)制作.o文件
gcc -c -fpic XXX.c XXX.c
(2)将.o文件打包
gcc -shared XXX.o XXX.o -o libXXX.so
(3)编译和链接
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:绝对路径
gcc XXX.c -o XXX -l calc -L库的路径 -I头文件路径
静态库和动态库区别
(1)静态库
优点:
静态库被打包到应用程序中,加载速度快;
发布程序无需提供静态库,移植方便。
缺点:
消耗系统资源,浪费内存;
更新、部署、发布麻烦。
注:静态库不能多个程序共享,多个程序需要使用同一静态库时,都需要加载,故浪费内存。静态库文件改动后,每个用到同一静态库的程序都需要重新编译、部署、发布。因此,更新、部署、发布麻烦。
(2)动态库
优点:
可以实现进程之间资源共享;
更新、部署、发布简单;
可以控制何时加载动态库。
缺点:
加载速度比静态库慢;
发布程序时需要提供依赖的动态库。
注:当程序使用到动态库时,动态库才加载进去,此后其他程序可以共享同一个动态库。当动态库更改时,只需要更新下动态库,而应用程序不需要再进行编译、部署、发布。
两者区别:
命名方式不同,链接时间和方式不同, 内存消耗不同,更新方式不用