【问题标题】:Why does C++ Boost distribution have `.dll`and `.lib` files?为什么 C++ Boost 发行版有 `.dll` 和 `.lib` 文件?
【发布时间】:2012-08-18 19:40:15
【问题描述】:

大家好。我目前正在创建一个“共享”库(又名 Windows 上的 DLL),该库又将依赖“Boost C++”库来提供日期时间功能。我注意到我的 Boost 安装(通过 Boostpro 完成)在 boost 安装的 lib 目录中有一些 DLL 和 LIB 文件。好的,我认为需要,所以我将它们添加到我的 IDE 中的库依赖项中。

现在我要做的是编写使用提升日期时间库的代码,创建一个共享库并从独立的可执行文件中使用它。即使我刚刚将创建的共享库复制到可执行文件夹而不是 boost_date_time-vc100-mt-1_47.dll 文件中,它也可以工作。奇怪的。现在我要做的是从我的项目中删除 Boost 的 DLL/库依赖项并构建共享库。它仍然有效。

我有点困惑。如果 Boost 库真的只是标题,为什么我的 Boostpro 安装有日期时间和其他 boost 部分的 *.lib 和 *.dll 文件?鉴于这些 boost 库无论如何都会被编译到我的共享库中,是否有任何我想使用它们的场景?

希望我已经足够清楚了,如果需要更多说明,请告诉我。同样 FWIW,我正在使用 Eclipse CDT + MingW 来完成这一切。

【问题讨论】:

  • “如果 Boost 库真的只有头文件”...这是一个非常重要的“如果”!

标签: c++ boost dll


【解决方案1】:

Boost 的大部分部分仅是标头,而其他一些部分(至少文件系统和 iostreams IIRC)需要链接库。所以这一切都取决于你使用 Boost 的哪些部分。 Boost Library Documentation 页面上记录了哪些部分需要链接。

一些库使用自动链接。这意味着头文件包含特定于编译器的代码,用于嵌入指令以将正确的库链接到目标文件中。这是编译器必须支持的有用功能。但 gcc 工具链(包括 MingW)不支持。

【讨论】:

  • 在该页面上,日期时间提升(我正在使用)被称为“自动链接”。那是什么意思?另外,如果它不仅仅是标题,为什么我的共享库在不包含提升日期时间共享库的情况下工作?
  • 编辑了我的答案以包含有关自动链接的信息。我不知道日期/时间库的细节,但它可能包含一些只需要标题的东西和其他需要链接库的东西。这取决于你到底使用什么。
  • 不幸的是,我仍然不明白为什么像 Boostpro 这样的 boost 发行版会为几乎所有模块提供库文件,其中一些是仅头文件。另外,我对“mingw 不支持”有点怀疑,所以让我尝试使用 mingw 从头开始​​构建 Boost,并在关闭之前更新问题。
  • 有时这样做是因为构建脚本需要 .h 文件和 .lib/dll 之间的对称性。不是我的想法,但我听说这是一个论点。在空库的情况下,这是一个空操作,所以谁在乎呢?
猜你喜欢
  • 2010-10-29
  • 1970-01-01
  • 2016-05-26
  • 2010-12-19
  • 2011-02-13
  • 2013-02-22
  • 1970-01-01
  • 2020-10-24
相关资源
最近更新 更多