静态库
静态库可以认为是一些目标代码的集合,在可执行程序运行前就已经加入到执行码中, 成为执行程序的一部分。一般以.a
做为文件后缀名。
静态库的命名一般分为三个部分:前缀、库名称和后缀,如库名称为test
那么一般为libtest.a
共享(动态)库
共享库在程序编译时并不会被连接到目标代码中, 而是在程序运行时才被载入。不同的应用程序如果调用相同的库, 那么在内存里只需要有一份该共享库的拷贝, 规避了空间浪费问题。一般以.so
做为文件后缀名. 共享库的命名同静态库也分为三个部分:前缀、库名称和后缀如库名称为test那么一般为libtest.so
静态库与动态库优缺点
由于由静态库生成的可执行文件是把静态库加载到了其内部, 所以静态库生成的可执行文件一般会比动态库大。
静态库
优点:
-
执行速度快, 是因为静态库已经编译到可执行文件内部了
-
移植方便, 不依赖域其他的库文件
缺点:
- 耗费内存, 是由于每一个静态库的可执行程序都会加载一次
- 部署更新麻烦, 因为静态库修改以后所有的调用到这个静态库的可执行文件都需要重新编译
动态库
优点:
- 节省内存
- 部署升级更新方便, 只需替换动态库即可, 然后再重启服务
缺点:
- 加载速度比静态库慢
- 移植性差, 需要把所有用到的动态库都移植