在编程中,库是可以在程序中重用的预编译代码片段的集合。库简化了程序员的生活,因为它们提供了可重用的函数、例程、类、数据结构等
它们可以在程序中重复使用。

静态库: 静态库或静态链接库是一组例程、外部函数和变量,它们在编译时在调用者中解析,并由编译器、链接器或绑定器复制到目标应用程序中,生成目标文件和一个独立的可执行文件。这个可执行文件和编译它的过程都被称为程序的静态构建。从历史上看,图书馆只能是静态的。
它们通常比共享库更快,因为一组常用的目标文件被放入单个库可执行文件中。无需重新编译文件即可构建多个可执行文件。因为它是要构建的单个文件,所以链接命令的使用比共享库链接命令更简单,因为指定了静态库的名称。

共享库:
共享库是 .so(或 Windows .dll 或 OS X .dylib)文件。
这些只是动态链接,包括库的地址(而静态链接是浪费空间)。 动态链接在运行时链接库。 因此,所有函数都位于内存空间中的一个特殊位置,每个程序都可以访问它们,而无需拥有它们的多个副本。

属性 静态库 共享库
链接时间 它发生在编译过程的最后一步。 程序放入内存后,在将可执行文件和库添加到内存中时,在链接过程中添加共享库。
执行方式 由链接器执行 由操作系统执行的
大小 静态库的大小要大得多,因为外部程序内置在可执行文件中。 动态库要小得多,因为只有一份动态库保存在内存中。
外部文件更改 如果对外部文件进行了任何更改,则必须重新编译可执行文件。 在共享库中,无需重新编译可执行文件。
执行时间 执行需要更长的时间,因为每次执行时都会加载到内存中。 它更快,因为共享库代码已经在内存中。
兼容性 从不存在兼容性问题,因为所有代码都在一个可执行模块中。 程序依赖于具有兼容的库。如果库从系统中删除,从属程序将无法工作。