繁体   English   中英

用cmake找不到Boost库

[英]Cannot find boost libraries with cmake

我已在Windows上安装boost 1.63.0,并且尝试使用CMake进行构建(使用Visual Studio 2017作为生成器)。 我在找find_package()来查找我的boost库时遇到了麻烦,我不知道为什么。

的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_ROOT% 库位于%BOOST_ROOT%/stage/lib 当我查看_boost_LIBRARY_SEARCH_DIRS_RELEASE ,它看起来的第一个位置是正确的位置。 为了确保,我也尝试将BOOST_LIBRARYDIR硬编码到该路径。

要安装boost,我将下载的存档解压缩到%BOOST_ROOT% ,然后运行bootstrap.\\b2 link=static,shared threading=single,multi 这应该给我所有版本的库。 在boost:system的情况下,我在%BOOST_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_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构建了一些东西。 这很奇怪,因为我是从VS 2017的Dev Command Prompt中运行它的。我进行了一个疯狂的猜测,并尝试使用./b2 toolset=msvc-14.1构建boost,但出现错误: *** argument error * rule maybe-rewrite-setup ( toolset : setup-script : setup-options : version : rewrite-setup ? )".

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

该线程似乎相关: Visual Studio 2017,Boost和CMake的版本号

检查正在使用的FindBoost.cmake脚本。 根据您使用的CMake版本,可能无法处理此版本的Boost。 根据发现的Boost版本设置库之间的依赖关系。

例如,GitHub上 CMake源代码中脚本的最新版本可处理版本1.63。 我遇到了CMake v3.6.2无法解决的问题。

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

我编译了boost,并使用相同的工具集来编译链接应用程序。 因此,我认为将所有编译的库从* -vc100- *重命名为* -vc141- *是安全的。 虽然通常我会劝阻(您可能会在ABI中获得细微的差别),但在这种情况下,我可以确定它是同一编译器,因此很明显,cmake或b2都有一个错误(使用(名称错误。

之后,cmake不仅发现了增强功能,而且成功建立了链接。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM