无法找到所需的Boost库 Windows Cmake

4
我正在尝试在Windows上构建Bytecoin源代码,并遇到了CMake和Boost库的问题。首先,我尝试获取Boost 1.55并自行编译。由于某些原因,其中有一两个库在最后没有编译成功,但我认为CMake至少会识别已编译的库。相反,在尝试加载CMake项目时,我收到以下错误消息: 错误:无法找到所请求的Boost库。Boost版本:1.55.0 Boost包含路径:C:/Program Files/boost/boost_1_55_0 找不到以下Boost库: boost_system boost_filesystem boost_thread boost_date_time boost_chrono boost_regex boost_serialization boost_program_options 找不到任何Boost库。您可能需要将BOOST_LIBRARYDIR设置为包含Boost库的目录或将BOOST_ROOT设置为Boost的位置。
然后我尝试向find_package()添加HINT。它尝试解析一个奇怪的路径,不确定它在哪里执行此操作。

CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:273 (if): Syntax error in cmake code at

C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:273

when parsing string

${Boost_C:/PROGRAM FILES/BOOST/BOOST_1_55_0_LIBRARY_RELEASE}

阅读了一些关于此事的SO答案后,我添加了环境变量:

C:\Users\Misha>set

BOOST_INCLUDEDIR=C:\local\boost_1_55_0 BOOST_LIBRARYDIR=C:\local\boost_1_55_0\lib32-msvc-12.0 BOOST_ROOT=C:\local\boost_1_55_0\boost

此时,我尝试使用预编译库,但没有效果。

CMkeLists.txt

find_package(Boost 1.55 REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options)
#find_package(Boost 1.55 REQUIRED COMPONENTS system filesystem thread date_time chrono regex serialization program_options HINT "C:/Program Files/boost/boost_1_55_0")
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
if (MINGW)
    set(Boost_LIBRARIES "${Boost_LIBRARIES};ws2_32;mswsock")
elseif (APPLE)
    set(Boost_LIBRARIES "${Boost_LIBRARIES}")
elseif (NOT MSVC)
    set(Boost_LIBRARIES "${Boost_LIBRARIES};rt")
endif ()

我对CMake不太熟悉,所以可能只是一个简单的修复。我只是看不到它。


find_package() 之前插入 set(Boost_DEBUG on) 并重新运行 cmake。在调试模式下,将显示所有搜索到的库。检查所有这些库是否存在于您分配给变量 BOOST_LIBRARYDIR 的目录下。HINT 选项与您的问题无关,因为它用于 Config 模式的 find_package,但您使用的是 Module 模式 (FindBoost.cmake)。 - Tsyvarev
@Tsyvarev 看起来 boost_serialization 至少是引起问题的原因之一“找不到以下静态 Boost 库:boost_serialization” - Misha Griffiths-Prasolova
@Tsyvarev 看起来它在目录中,所以我不太确定为什么找不到。 - Misha Griffiths-Prasolova
应该是这一行:正在查找<component>_LIBRARY_RELEASE:,其中会给出精确的文件名(component 是你在 find_package() 中指定的组件)。 - Tsyvarev
提到 BOOST_1_55_0_LIBRARY_RELEASE 的错误让我想到 cmake 在某种程度上将 1.55 视为 Boost 库,就好像它是 COMPONENTS 列表的一部分。我不认为你做错了什么,但也许可以尝试从 find_package() 中删除 1.55 参数。 - Stuart Berg
有人找到这个问题的解决方案了吗?我已经卡在同样的问题上两天了。 - Pulkit
1个回答

2
我曾遇到同样的错误,但已解决。我的BOOST库是在Windows 7(64位)上使用Gcc 6.3构建的。
我在CMakeLists.txt中设置了Boost_DEBUG并找到以下内容:
-- [ C:/Program Files/CMake/share/cmake-3.9/Modules/FindBoost.cmake:1620 ] Searching for SYSTEM_LIBRARY_RELEASE: libboost_system-mgw63-mt-1_67;libboost_system-mgw63-mt;libboost_system-mt-1_67;libboost_system-mt;libboost_system
这意味着FindPackage(Boost)正在搜索libboost_system-mgw63-mt-1_67,但我的库名称是libboost_system-mgw63-mt-x64-1_67。
因此,我从所有库名称中删除了X64,现在它可以正常工作。

1
我觉得重命名所有库不是解决这个问题的适当方法。有没有人知道是否有更正式的解决方案? - vpaladino778

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接