C++ 找不到使用cmake的boost库

C++ 找不到使用cmake的boost库,c++,boost,cmake,C++,Boost,Cmake,我已经在Windows上安装了boost 1.63.0,我正在尝试使用CMake(使用Visual Studio 2017作为生成器)进行构建。我在使用find_package() CMakeLists.txt: find_package(Boost REQUIRED COMPONENTS system filesystem thread) 输出: CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.8/Modules/FindB

我已经在Windows上安装了boost 1.63.0,我正在尝试使用CMake(使用Visual Studio 2017作为生成器)进行构建。我在使用
find_package()

CMakeLists.txt:

find_package(Boost REQUIRED COMPONENTS system filesystem thread)
输出:

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.8/Modules/FindBoost.cm
ake:1813 (message):
  Unable to find the requested Boost libraries.

  Boost version: 1.63.0

  Boost include path: C:/Program Files (x86)/boost/boost_1_63_0

  Could not find the following Boost libraries:

          boost_system
          boost_filesystem
          boost_thread

  Some (but not all) of the required Boost libraries were found.  You may
  need to install these additional Boost libraries.  Alternatively, set
  BOOST_LIBRARYDIR to the directory containing Boost libraries or BOOST_ROOT
  to the location of Boost.
Boost查找包含,但不查找库。标题位于:
%BOOST\u ROOT%
。库位于
%BOOST\u ROOT%/stage/lib
。当我查看
\u boost\u LIBRARY\u SEARCH\u DIRS\u RELEASE
时,它首先看到的是正确的位置。我也尝试过将
BOOST\u LIBRARYDIR
编码到该路径,只是为了确定

要安装boost,我将下载的归档文件解压缩到
%boost\u ROOT%
,然后运行
引导程序和
\b2链接=静态,共享线程=单线程,多线程。这应该给我所有版本的库。对于boost:system,我在
%boost\u ROOT%/stage/lib%
中有以下二进制文件:

boost_system-vc100-mt-1_63.dll
boost_system-vc100-mt-1_63.lib
boost_system-vc100-mt-gd-1_63.dll
boost_system-vc100-mt-gd-1_63.lib
libboost_system-vc100-mt-1_63.lib
libboost_system-vc100-mt-gd-1_63.lib
我已尝试启用和禁用以下功能,但无效:

set( Boost_USE_STATIC_LIBS ON )
set( Boost_USE_MULTITHREADED OFF )
set( Boost_DEBUG ON )
这是一个有趣的部分。
Boost\u DEBUG
参数弹出以下行:

Searching for SYSTEM_LIBRARY_RELEASE: boost_system-vc141-mt-1_63;boost_system-vc141-mt;boost_system-mt-1_63;boost_system-mt;boost_system
注意vc141与vc100的对比。我想。\b2为vc100做了些什么。这很奇怪,因为我是在VS2017的Dev命令提示符下运行它的。我胡乱猜测,试图用
/b2 toolset=msvc-14.1
构建boost,但我得到了一个错误:
***参数错误*规则可能重写设置(工具集:设置脚本:设置选项:版本:重写设置?)。

如何确保使用VS2017或MSVC141编译boost

这条线索似乎有关联:

检查正在使用的
FindBoost.cmake
脚本。根据您使用的cmake版本,可能无法处理此版本的Boost。库之间的依赖关系取决于找到的Boost版本

例如,CMake sources中最新版本的脚本处理的是版本1.63。我在CMake v3.6.2中遇到了问题,它没有处理它


关于MSVC的版本不匹配,我不知道,对不起。

我编译了boost,并且正在使用相同的工具集编译链接应用程序。因此我决定将所有编译的lib从*-vc100-*重命名为*-vc141-*是安全的。但通常我不鼓励这样做(你可以在ABI中得到细微的区别),在这种情况下,我确信它是同一个编译器,因此很明显,cmake或b2有一个bug,它创建(或搜索)了一个名称错误的文件


之后,cmake不仅找到了boost,而且成功链接。

您提到的帖子建议使用
b2 toolset=msvc-14.1
构建boost(“msvc”和版本部分用破折号分隔,而不是等号)。找到了两种方法都有建议的帖子。尝试了两种方法。谢谢你的建议,但似乎没有什么不同。谢谢,我从3.6开始就没有更新过cmake。所以你的答案听起来很有道理。我会在周一回去工作时检查。将cmake更新到3.8。它知道我安装了VS2017,所以它看起来仍然很不错用于msvc-141二进制文件。当我调用boostrap&b2时,它只生成msvc-100二进制文件。此解决方案不起作用。这在很多情况下都有效(包括我链接boost::log的情况)。但是,当我使用
-DUNICODE
编译项目时,我收到错误LNK2038:检测到“boost\u log\u abi”不匹配:值“v2\u mt\u nt5”与值“v2\u mt\u nt6”不匹配。因此可能仍然存在问题。