gpt4 book ai didi

C++:将外部库链接到 dll 库

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

我目前正在使用 c++ 在 Windows (dll) 上开发共享库。该库依赖于另一个外部库。

将它们链接在一起的最佳方式是什么?

  • 将外部库作为静态库链接到我的共享库中?
  • 将其链接为共享库并将 dll 提供给正在使用我的共享库的应用程序?

对于第二种情况,如果我创建一个使用我自己创建的共享库以及外部库作为共享库的应用程序,会发生什么?

例如,如果我的共享库是使用外部库版本 1.1 构建的,并且应用程序使用较新的版本(例如 1.3)?现在 dll 应该不同,但我如何将它们提供给主应用程序?

是否有一些关于如何处理此类情况的最佳实践或建议?

最佳答案

这实际上取决于您想要做什么以及如何部署您的库。

共享/动态库(Windows 上的 dll)比静态库有几个优点

  • 它们可以从应用程序外部分发,从而使您的应用程序二进制文件更小
  • 它们可以在应用程序外部进行更新
  • 它们的效率稍高一些,因为代码仅在需要时才执行,而不是与可执行文件捆绑在一起

当然他们也有一些弱点

  • 它们可以从您的应用程序外部分发并在外部更新 - 允许 dll 注入(inject)攻击
  • 尝试用可执行文件释放动态库是最痛苦和可怕的事情之一(尤其是在没有 RPATH 的 Windows 上)

您可能必须使用dll,具体取决于您的外部库许可,例如Qt在许多情况下(不是全部)需要共享库链接。

标准约定通常是提供库的共享版本和静态版本,其中共享版本完全链接到其他共享库,静态版本是 ar 静态库(包括所有依赖项)。然后,共享库变体提供链接说明(即 .pc (pkgconfig) 文件),指定要链接到的其他库的版本(即 v1.1x.dll)以便成功编译/链接。

关于C++:将外部库链接到 dll 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60337538/

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