【问题标题】:Unable to find the requested Boost libraries Windows Cmake找不到请求的 Boost 库 Windows Cmake
【发布时间】: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_packageConfig 模式,但您使用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 参数

标签: c++ c windows boost cmake


【解决方案1】:

我遇到了同样的错误,但解决了。我的 BOOST 库是在 Windows 7(64 位)上使用 Gcc 6.3 构建的。

我在CMakeLists.txt中设置了Boost_DEBUG on,发现

-- [ C:/Program Files/CMake/share/cmake-3.9/Modules/FindBoost.cmake:1620 ] 搜索 对于 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,现在它可以正常工作了。

【讨论】:

  • 我觉得重命名所有库并不是解决此问题的正确方法。有谁知道是否有更正式的解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
  • 2020-11-29
  • 2018-08-20
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多