静态库
①命名以*.o结尾
②静态库在链接阶段直接加入可执行文件,执行过程无需该静态库
③静态库生成的文件链接产生的可执行文件 相对于动态库 较大
动态库
特点
①命名以*.so结尾
②目标文件在链接阶段只指明链接的动态库,动态库与目标文件互相独立,执行过程需要该动态库
③动态库生成的目标文件较小
对于工程共通源码文件(如多个进程使用同一模块源码),将其制作为动态库可节省系统空间。当动态库出现bug,只需要重新生成一个动态库替换即可。
内存实现
动态库在整个内存空间有一份,而每个进程都有各自的虚拟空间,虚拟空间会通过匿名映射(mmap)使其进程与动态库关联。
加载
显式链接
不需要申明动态库相关头文件,调用时需要加载动态库名称
只有执行到相应代码时才加载动态库(大型项目)
隐式链接
需要添加相应头文件
由系统控制加载时间,一般在程序启动时就加载(项目启动即可发现库是否有问题)