静态库和共享库的区别

静态库和共享库的区别

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

它们可以在程序中重复使用。

静态库: 静态库或静态链接库是一组例程、外部函数和变量,它们在编译时在调用者中解析,并由编译器、链接器或绑定器复制到目标应用程序中,生成目标文件和一个独立的可执行文件。这个可执行文件和编译它的过程都被称为程序的静态构建。从历史上看,图书馆只能是静态的。

它们通常比共享库更快,因为一组常用的目标文件被放入单个库可执行文件中。无需重新编译文件即可构建多个可执行文件。因为它是要构建的单个文件,所以链接命令的使用比共享库链接命令更简单,因为指定了静态库的名称。

共享库:

共享库是 .so (或 Windows .dll 或 OS X .dylib )文件。

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

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程