静态库和动态库

Tags
C语言
ID
5
 

静态库

  1. 静态库在编译时被链接到目标程序中,成为目标程序的一部分。
  1. 静态库的函数和数据被复制到目标程序中,使得目标程序可以独立运行,不依赖于外部库文件。
  1. 静态库的文件较大,因为它包含了所有需要的函数和数据
  1. 静态库在目标程序编译时被静态链接器处理,链接时会将库文件的代码和数据复制到目标程序中。
  1. 静态库的扩展名在 Linux 上通常是 .a(例如 libexample.a),在 Windows 上通常是 .lib(例如 example.lib)。

动态库

  1. 动态库在运行时被加载到内存中,并由操作系统提供动态链接的支持。
  1. 动态库的函数和数据不会被复制到目标程序中,目标程序只包含对动态库的引用
  1. 动态库的文件较小,因为它只包含函数和数据的引用,实际的代码和数据存储在库文件本身中。
  1. 动态库在目标程序运行时由动态链接器加载和解析,使得多个程序可以共享同一个动态库的实例。
  1. 动态库的扩展名在 Linux 上通常是 .so(例如 libexample.so),在 Windows 上通常是 .dll(例如 example.dll)。
需要注意的是,扩展名只是一种约定,并非强制要求。实际上,你可以使用其他扩展名来命名库文件,但通常为了遵循惯例和方便识别,推荐使用上述的扩展名。

关于 .o 文件

.o 文件是目标文件(Object File),它是编译源代码后生成的中间文件,包含了编译后的二进制代码和符号信息。.o 文件本身既不是静态库也不是动态库。