Boost 库要求我认为没有必要的 lib 文件

Boost library demanding lib file that I believe is not necessary

我正在使用供应商提供的一些自动生成的 C++ 代码。他们广泛使用 Boost 库,因此我也需要使用 Boost 库来创建适当的对象以作为输入发送到供应商方法。他们在自动生成代码的 lib 文件夹中提供所有 Boost 头文件。

我以前从未使用过 Boost,但从我过去几天收集到的信息来看,它大部分是一个只有头文件的库,对我来说这意味着没有 *.dll 或 *.lib在我的软件中使用它所需的文件,前提是我不使用列出的需要 lib 文件的功能。

我遇到的问题是,当我尝试包含 "boost\date_time.hpp" 时,当需要构建它时,我收到 LNK1104 错误 "cannot open file libboost_date_time-vc140-mt-gd-1_38.lib"。我注意到在 Boost 网站上它说一些库确实有可选的编译库,这取决于是否使用了某些特性;对于 date_time,它表示如下:

"Boost.DateTime has a binary component that is only needed if you're using its to_string/from_string or serialization features, or if you're targeting Visual C++ 6.x or Borland."

我不需要任何需要编译库的功能,并且我的代码中根本没有引用任何功能,只是添加了 include。那么它为什么要这个文件呢?另外,它怎么知道需要什么文件?在某个头文件中是否隐藏了偷偷摸摸的#pragma?我开始寻找,但是有太多的路要走。

供应商确实为 Boost.DateTime 提供了一个已编译的 dll 和 lib 文件,但是它被命名为 'boost_date_time-vc140-mt-gd-1_38.lib',编译器正在寻找的文件前面有前缀 'lib'。如果它确实需要它,那么如何将链接器定向到正确的文件?我知道我可以将文件名更改为链接器正在寻找的名称(链接器已经有了包含该文件的文件夹的路径,这与它无关)但是由于此代码来自供应商代码生成软件它会经常恢复为原始文件名,因此这不是最佳解决方案。

一如既往,感谢您提供的任何帮助。

正如 tkausl 在评论中提到的,头文件中有一个 #pragma 评论试图加载库。

通过在“#include "boost\date_time.hpp"”行之前添加“#define BOOST_ALL_NO_LIB”行,这解决了问题,因为定义的宏告诉 Boost 不要加载 lib 文件。