概述
linux下有两种库:动态库和静态库。
静态库在编译过程中已经被载入,因此编译出来的可执行程序都比较大。程序运行时不再需要静态库,即程序编译完之后静态库就没用了。
动态库(共享库)在程序运行时载入内存,在编译过程中仅简单的引用,因此可执行文件体积比较小。程序运行需要加载动态库,即程序和动态库必须同时存在。
静态库
- 静态库是.o文件的集合,使用时可以把.a文件当成多个.o的集合使用。
- 如果.a依赖于动态库,生成.a时不会把.so动态库集合进来,那么使用者使用.a时需要同时链接其依赖的.so库。在产生.a时要避免依赖过多的动态库。
- 如果.a依赖于其他的.o文件(比如调用了某个.o中定义的函数),生成.a时不会把.o文件或其内部的函数集合进来,那么在使用.a文件编译执行文件会报错符号找不到。
- 静态库更新之后使用静态库的程序必须重新编译。
动态库
- 在编译的时候动态库并没有被编译进目标代码,你的程序执行到相关函数时才去调用动态库,所以程序运行时必须提供相应的库。
- 动态库更新之后不需要重新编译目标程序。