[英]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.