gpt4 book ai didi

c++ - 静态库和共享库的区别?

转载 作者:行者123 更新时间:2023-12-02 00:25:15 28 4
gpt4 key购买 nike

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

我使用 Eclipse,有多种项目类型,包括静态库和共享库?一个比另一个有优势吗?

最佳答案

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

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

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

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

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

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

关于c++ - 静态库和共享库的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44149424/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com