静态库和共享库之间的区别?

莫希特·德什潘德(Mohit Deshpande)

静态库和共享库有什么区别?

我使用Eclipse,并且有几种项目类型,包括“静态库”和“共享库”?一个人比另一个人有优势吗?

面馆

共享库是.so(或Windows .dll,或OS X .dylib)文件。与该库有关的所有代码都在此文件中,并且在运行时使用该库的程序会引用它。使用共享库的程序仅引用其在共享库中使用的代码。

静态库是.a(或Windows .lib中)文件。与库有关的所有代码都在此文件中,并且在编译时直接链接到程序中。使用静态库的程序从静态库中获取其使用的代码的副本,并将其作为程序的一部分。[Windows也有用于引用.dll文件的.lib文件,但它们的作用与第一个相同。]

每种方法都有优点和缺点:

  • 共享库减少了在使用该库的每个程序中重复的代码量,从而使二进制文件较小。它还允许您用功能上等效的共享对象替换共享对象,但可能会增加性能优势,而无需重新编译使用共享对象的程序。但是,共享库将为函数的执行带来少量的额外成本,以及运行时的加载成本,因为库中的所有符号都需要连接到它们使用的事物。另外,共享库可以在运行时加载到应用程序中,这是实现二进制插件系统的通用机制。

  • 静态库增加了二进制文件的整体大小,但这意味着您无需携带正在使用的库的副本。由于代码是在编译时连接的,因此没有任何其他运行时加载成本。代码就在那里。

就个人而言,我更喜欢共享库,但是在需要确保二进制文件没有可能难以满足的许多外部依赖项时使用静态库,例如C ++标准库的特定版本或Boost C ++库的特定版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章