什么叫库?
库 (Library) 说白了就是一段编译好的二进制代码, 加上头文件就可以供别人使用.
一种情况是某些代码需要给别人使用, 但是我们不希望别人看到源码, 就需要以库的形式进行封装, 只暴露出头文件.
另外一种情况是, 对于某些不会进行大的改动的代码, 我们想减少编译的时间, 就可以把它打包成库, 因为库是已经编译好的二进制了, 编译的时候只需要 Link 一下, 不会浪费编译时间.
静态库:
静态库即静态链接库(Windows 下的 .lib,Linux 和 Mac 下的 .a). 之所以叫做静态, 是因为静态库在编译的时候会被直接拷贝一份, 复制到目标程序里, 这段代码在目标程序里就不会再改变了. 静态库的好处很明显, 编译完成之后, 库文件实际上就没有作用了. 目标程序没有外部依赖, 直接就可以运行. 当然其缺点也很明显, 就是会使用目标程序的体积增大.
动态库:
动态库即动态链接库(Windows 下的 .dll,Linux 下的 .so,Mac 下的 .dylib). 与静态库相反, 动态库在编译时并不会被拷贝到目标程序中, 目标程序中只会存储指向动态库的引用. 等到程序运行时, 动态库才会被真正加载进来. 动态库的优点是, 不需要拷贝到目标程序中, 不会影响目标程序的体积, 而且同一份库可以被多个程序使用(因为这个原因, 动态库也被称作共享库). 同时, 编译时才载入的特性, 也可以让我们随时对库进行替换, 而不需要重新编译代码. 动态库带来的问题主要是, 动态载入会带来一部分性能损失, 使用动态库也会使得程序依赖于外部环境. 如果环境缺少动态库或者库的版本不正确, 就会导致程序无法运行(Linux 下喜闻乐见的 lib not
found 错误).
来源: http://www.bubuko.com/infodetail-2551952.html