Boost 库和 Visual Studio (C++) 有问题

Having problems with Boost library and Visual Studio (C++)

您好!

我正在使用 Visual Studio 2017,我最近尝试在我的一个项目中实现 Boost 库,但这似乎不起作用。我总是遇到 linking 问题,我总是遇到同样的错误 1>LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc141-mt-gd-x32-1_66.lib'。 (这个是给

#include <boost/filesystem.hpp>

代码。我尝试的所有库都出现相同的错误 link)

我下载了 Boost 网页提供的二进制文件,并安装了它。 我还尝试在 C/C++ > General > Additional include Directory 设置中添加以下内容:

C:\local\boost_1_66_0

以及我添加的 Linker > General > Additional library Directory 设置

C:\local\boost_1_66_0\libs

然后我关闭了 "Using Precompiled Headers"。 (以上内容由Boost网页推荐)

此处的帖子“Linker error LNK1104 with 'libboost_filesystem-vc100-mt-s-1_49.lib'”还建议将我在 C/C++ > Code Generation > Runtime Library 中的设置从 MT/MTd 更改为 MD/MDd,我已经完成了。它还说了一些关于 bjam.exe 程序的内容,无论如何我都没有在我的 boost 目录中找到它。

尽管我尝试了,但还是 LNK1104 错误。我该怎么办?

不要将 \libs 目录添加到库路径,而是添加 \lib64-msvc-14.1 目录。

由于 Visual Studio 既是 32 位编译器又是 64 位编译器,因此您可以 link 使用不少于 16 种不同类型的库,即:

  • 32 位或 64 位,
  • 共享或静态库,
  • 调试或发布
  • 单线程或多线程。

此外,由于 boostVisual Studio 的版本不同,因此组合可能比上面的 16 种组合更多!幸运的是,boost 支持使用 Visual Studio 自动 linking,参见:How Boost automatically includes libraries。因此,您的 linker 错误中的文件名提供了一些关于 boostVisual Studio 正在搜索的确切类型的线索:

LINK : fatal error LNK1104: cannot open file 'libboost_filesystem-vc141-mt-gd-x32-1_66.lib'

根据此处的答案:如何解码 boost 库命名? Visual Studio 正在搜索 boost 1.66 filesystem 库的多线程调试版本。

我也从经验中知道 Visual Studio 静态库以 libboost_ 开头,而共享库以 boost_ 开头,有人在 [=18] 中更改了 boost 命名系统=] 将大小添加到名称中(-x32-x64),给现有的构建系统带来无穷无尽的麻烦,例如CMake!

因此 Visual Studio 仍在搜索 boost::filesystem 的静态 32 位版本,尽管更改了您的设置...

要修复它,请下载 32 位静态库或按照此处的说明构建您自己的增强库:

注意:无论您选择哪个选项,您仍然会收到编译器警告:

Unknown compiler version - please run the configure tests and report the results

因为,Visual Studio的当前版本是在boost 1.66之后发布的。
这是将旧版本的 boost 与较新的编译器一起使用时的常见警告。