提升库要求我认为没有必要的库文件

Boost library demanding lib file that I believe is not necessary

本文关键字:文件      更新时间:2023-10-16

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

我以前从未使用过 Boost,但从我过去几天收集到的信息来看,它在很大程度上是一个仅标题库,这对我来说意味着在我的软件中使用它不需要 *.dlls 或 *.lib 文件,前提是我不使用列出的需要 lib 文件的功能。

我遇到的问题是,当我尝试在构建它时包含"boost\date_time.hpp"时,我收到LNK1104错误"无法打开文件 libboost_date_time-vc140-mt-gd-1_38.lib"。我注意到在 Boost 网站上,它说一些库确实有可选的编译库,具体取决于是否使用了某些功能;对于date_time,它说以下内容:

"Boost.DateTime有一个二进制组件,只有当你使用它的to_string/from_string或序列化功能,或者如果你的目标是Visual C++ 6.x或Borland时,才需要它。

我不需要任何需要编译库的功能,并且在我的代码中根本没有引用任何功能,只是添加了包含。那么为什么它要求这个文件呢?另外,它怎么知道需要什么文件?其中一个头文件中是否隐藏了偷偷摸摸的 #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 文件。