遇到Boost库和Visual Studio(C ++)的问题

问题描述 投票:1回答:2

你好!

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

#include <boost/filesystem.hpp>

码。对于我尝试链接的所有库,我得到了相同的错误)

我下载了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

我关闭了“使用预编译标题”。 (以上是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错误。我该怎么办?

c++ visual-studio boost linker-errors
2个回答
3
投票

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

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

此外,由于boostVisual Studio都有不同的版本,因此可能有比上述16种更多的组合!幸运的是,boost支持与Visual Studio的自动链接,请参阅:How Boost automatically includes libraries。因此,链接器错误中的文件名提供了一些关于boostVisual Studio正在搜索的类型的线索:

链接:致命错误LNK1104:无法打开文件'libboost_filesystem-vc141-mt-gd-x32-1_66.lib'

根据这里的答案:How can I decode the boost library naming? Visual Studio正在搜索boost 1.66 filesystem库的多线程调试版本。

我也从经验中知道Visual Studio静态库以libboost_开头,而共享库以boost_开头,有人在boost中更改了boost 1.66命名系统以添加名称大小(-x32-x64),对现有的构建系统没有任何麻烦,例如CMake

所以Visual Studio仍然在寻找静态的32位版本的boost::filesystem,尽管你改变了你的设置......

要修复它,可以按照以下说明下载32位静态库或构建自己的boost库:Building boost for Visual Studio

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

未知的编译器版本 - 请运行配置测试并报告结果

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


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.