【发布时间】:2016-04-21 07:27:21
【问题描述】:
我正在尝试在 Windows 上构建 Bytecoin 源代码,但遇到了 CMake 和 Boost 库的问题。首先,我尝试使用 Boost 1.55 并自己编译它。由于某种原因,接近末尾的一两个库没有编译,但我认为 CMake 至少会识别已编译的库。相反,我在尝试加载 CMake 项目时收到此错误:
错误:无法找到请求的 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。它试图解析一个奇怪的路径,不确定它在哪里这样做:
C:/Program Files 处的 CMake 错误 (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:273(如果):语法 cmake代码中的错误
C:/Program Files (x86)/CMake/share/cmake-3.4/Modules/FindBoost.cmake:273解析字符串时
${Boost_C:/PROGRAM FILES/BOOST/BOOST_1_55_0_LIBRARY_RELEASE}
阅读一些关于我添加环境变量的问题的答案:
C:\Users\Misha>设置
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
此时我尝试使用precompiled libs,没有。
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选项与您的问题无关,因为它用于find_package 的Config模式,但您使用Module模式(FindBoost.cmake)。 -
@Tsyvarev 看来 boost_serialization 至少会导致问题
Could not find the following static Boost libraries: boost_serialization -
@Tsyvarev 它似乎在目录中,所以我不太清楚为什么找不到它
-
它应该是行
Searching for <component>_LIBRARY_RELEASE:,其中给出了精确的文件名(组件是您在find_package()中指定的)。 -
提到
BOOST_1_55_0_LIBRARY_RELEASE的错误让我认为cmake 以某种方式将1.55视为boost 库,就好像它是COMPONENTS列表的一部分一样。我不认为你做错了什么,但也许可以尝试从find_package()中删除1.55参数