什么是库?
库(Library)就是一段编译好的二进制代码,加上头文件就可以供别人使用。我们在与别人合作开发的时候,如果我们实现的功能需要提供给别人使用,但又不想让对方看到自己的源码。这时候我们只需打包成库并提供头文件让对方调用即可。
库文件是已经编译好的二进制文件,我们同样可以利用这个特性。将我们已经实现完善(修改量较少)的功能模块编译成库,减少我们整体程序的编译时间。
动态库:
动态库.dylib/.tbd或者系统的framework(系统的framework都是动态库)
静态库:
.a文件,静态库会影响我们包的体积,是终会将这个静态库复制到你最终输出的二进制文件去。
framework:
framework是程序中使用的一种资源打包方式,可以将代码文件,头文件,资源文件,说明文档集中在一起,方便开发者使用。也就是说framework只是一种打包方式,与我们所说的静态库和动态库的本质是没有太大关系的。
动态库与静态库的区别:
静态库在链接(link)的过程中会完整的复制到可执行文件中,如果两个程序都包含某个相同的静态库文件,那么每个二进制可执行文件其实都包含了这份静态库代码。
动态库文件在链接(link)的过程中不需要复制到目标程序中,链接时会为可执行文件(.o/.obj文件)打个标记,在程序启动后用动态加载。
静态库相对动态库的话,因为没有外部依赖,可直接运行,效率高于动态库。
动态库相对于静态库的话,不会影响目标程序的体积,一份动态库可多个程序使用。(动态库也称为共享库)