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 位,
- 共享或静态库,
- 调试或发布
- 单线程或多线程。
此外,由于 boost
和 Visual Studio
的版本不同,因此组合可能比上面的 16 种组合更多!幸运的是,boost
支持使用 Visual Studio
自动 linking,参见:How Boost automatically includes libraries。因此,您的 linker 错误中的文件名提供了一些关于 boost
库 Visual 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
与较新的编译器一起使用时的常见警告。
您好!
我正在使用 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 位,
- 共享或静态库,
- 调试或发布
- 单线程或多线程。
此外,由于 boost
和 Visual Studio
的版本不同,因此组合可能比上面的 16 种组合更多!幸运的是,boost
支持使用 Visual Studio
自动 linking,参见:How Boost automatically includes libraries。因此,您的 linker 错误中的文件名提供了一些关于 boost
库 Visual 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
与较新的编译器一起使用时的常见警告。