- 静态库在编译的时候会被直接拷贝一份到目标程序里,这段代码在目标程序里就不会再改变了。动态库在编译时并不会被拷贝到目标程序中,目标程序中只会存储指向动态库的引用。等到程序运行时,动态库才会被真正加载进来。且同一份库可以被多个程序使用(动态库也被称作共享库)。
- 静态库没有外部依赖,动态库使得程序依赖于外部环境。
- 动态库运行时才载入的特性,可以随时对库进行替换,而不需要重新编译代码,动态载入会带来一部分性能损失;静态库使用目标程序的体积增大。
动态库可以使用gcc选项里面的 -fPIC进行编译,以达到代码共享的目的。
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。