为什么C++ Boost发行版有.dll和.lib文件?

6
大家好。我正在创建一个“共享”库(在Windows上是DLL),它依赖于“Boost C ++”库的日期时间特性。我注意到我的Boost安装(通过Boostpro完成)在boost安装的lib目录中有一些DLL和LIB文件。我认为这些文件是必需的,所以我将它们添加到我的IDE库依赖项中。
现在我写使用Boost日期时间库的代码,创建共享库并从独立可执行文件中使用它。这样做可以工作,即使我只是将我创建的共享库复制到可执行文件夹中,而没有复制boost_date_time-vc100-mt-1_47.dll文件。奇怪的是,现在我从我的项目中移除了Boost的DLL /库依赖项并构建了共享库。然后,它仍然可以工作。
我有点困惑。如果Boost库真的只有头文件,那么为什么我的Boostpro安装有datetime和其他boost部分的*.lib和*.dll文件呢?如果那些boost库最终都编译到我的共享库中,那么是否有任何情况需要使用它们呢?
希望我的解释足够清晰,请让我知道是否需要更多的解释。此外,对于所有这一切,我都在使用Eclipse CDT + MingW。

1
如果Boost库确实只是头文件...那可是个非常重要的“如果”! - Kerrek SB
1个回答

4
大部分Boost的组件都是头文件,但有些组件(至少包括filesystem和iostreams)需要链接库。所以这取决于你使用的Boost组件。哪些部分需要链接已在Boost Library Documentation页面上记录。
一些库使用自动链接。这意味着头文件包含特定于编译器的代码,将链接正确的库的指令嵌入到目标文件中。这是一个有用的功能,必须得到编译器的支持。然而,gcc工具链(包括MingW)不支持该功能。

在那个页面上,提到了日期时间 Boost(我正在使用)被称为“自动链接”。这是什么意思?另外,如果它不是仅头文件,为什么我的共享库可以正常工作而无需包含 Boost 日期时间共享库? - sasuke
编辑了我的答案,包括有关自动链接的信息。我不知道日期/时间库的具体细节,但它可能包含一些仅需要头文件而另一些则需要链接库的内容。这取决于你使用的是什么。 - Sven
不幸的是,我仍然不明白为什么像Boostpro这样的boost发行版会提供几乎所有模块的库文件,其中一些是仅有头文件的。此外,我对“mingw不支持这个”有点怀疑,所以让我尝试使用mingw从头开始构建Boost,并在关闭问题之前更新问题。 - sasuke
有时这样做是因为构建脚本期望.h文件和.lib/dll之间存在对称性。虽然不是我的想法,但我听过这个论点。在空库的情况下,这是一个无操作,所以谁在乎呢? - meawoppl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接