在编程中,库是可以在程序中重用的预编译代码片段的集合。库简化了程序员的生活,因为它们提供了可重用的函数、例程、类、数据结构等
它们可以在程序中重复使用。
静态库: 静态库或静态链接库是一组例程、外部函数和变量,它们在编译时在调用者中解析,并由编译器、链接器或绑定器复制到目标应用程序中,生成目标文件和一个独立的可执行文件。这个可执行文件和编译它的过程都被称为程序的静态构建。从历史上看,图书馆只能是静态的。
它们通常比共享库更快,因为一组常用的目标文件被放入单个库可执行文件中。无需重新编译文件即可构建多个可执行文件。因为它是要构建的单个文件,所以链接命令的使用比共享库链接命令更简单,因为指定了静态库的名称。
共享库:
共享库是 .so
(或 Windows .dll
或 OS X .dylib
)文件。
这些只是动态链接,包括库的地址(而静态链接是浪费空间)。 动态链接在运行时链接库。 因此,所有函数都位于内存空间中的一个特殊位置,每个程序都可以访问它们,而无需拥有它们的多个副本。
属性 | 静态库 | 共享库 |
---|---|---|
链接时间 | 它发生在编译过程的最后一步。 | 程序放入内存后,在将可执行文件和库添加到内存中时,在链接过程中添加共享库。 |
执行方式 | 由链接器执行 | 由操作系统执行的 |
大小 | 静态库的大小要大得多,因为外部程序内置在可执行文件中。 | 动态库要小得多,因为只有一份动态库保存在内存中。 |
外部文件更改 | 如果对外部文件进行了任何更改,则必须重新编译可执行文件。 | 在共享库中,无需重新编译可执行文件。 |
执行时间 | 执行需要更长的时间,因为每次执行时都会加载到内存中。 | 它更快,因为共享库代码已经在内存中。 |
兼容性 | 从不存在兼容性问题,因为所有代码都在一个可执行模块中。 | 程序依赖于具有兼容的库。如果库从系统中删除,从属程序将无法工作。 |
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/264224.html