【问题标题】:CMake error: common is required but boost was not foundCMake 错误:需要 common 但未找到 boost
【发布时间】:2016-03-30 10:03:00
【问题描述】:

我正在尝试用 cmake_3.5.0 编译 opencv_2.4.9 以在 Qt_5.3.2 MinGW 中运行一个项目,它一直显示此错误:

Common needed but can't find boost

我选择“MinGW Makefiles”作为生成器,并在配置窗口中选择“指定本机编译器”。我定义了 BOOST_ROOT 环境变量,这是我的 CmakeLists.txt:

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)

SET(sampleName MyApp)

set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC ON)
set(Boost_COMPILER -gcc49)
SET(CMAKE_INCLUDE_PATH ${CMAKE_INCLUDE_PATH} "C:/Program Files/PCL 1.6.0/3rdParty/Boost/include")
SET(CMAKE_LIBRARY_PATH ${CMAKE_LIBRARY_PATH} "C:/Program Files/PCL 1.6.0/3rdParty/Boost/lib")

find_package(PCL 1.6.0 REQUIRED)
FIND_PACKAGE(Boost)
IF (Boost_FOUND)
    INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR})
    ADD_DEFINITIONS( "-DHAS_BOOST" )
ENDIF()

FIND_PACKAGE(MRPT REQUIRED base;bayes;obs;gui)

include_directories(${PCL_INCLUDE_DIRS})
include_directories("C:/Program Files/PCL 1.6.0/3rdParty/Boost/include")

link_directories(${PCL_LIBRARY_DIRS})
link_directories("C:/Program Files/PCL 1.6.0/3rdParty/Boost/lib")

add_definitions(${PCL_DEFINITIONS})

add_executable (MyApp Local.cpp part.h grab.h interface.h test.cpp test.h)

target_link_libraries (MyApp ${PCL_LIBRARIES} libeng.lib libmx.lib libmex.lib libmat.lib Aria.lib winmm.lib wsock32.lib)

TARGET_LINK_LIBRARIES(${sampleName}
${MRPT_LIBS} # This is filled by FIND_PACKAGE(MRPT ...)
"" # Optional extra libs...
)

有谁知道如何解决这个错误?

【问题讨论】:

  • 看起来您的 Boost 安装与您的平台不兼容。检查其他问题“CMake 找不到 Boost”以解决您的问题。
  • 我检查了其他问题并尝试了那里提到的东西。但我仍然收到此错误。它找到了 boost include 但它没有找到库。什么Boost安装兼容windows 7 64bit for qt?
  • 当您指定 Boost_COMPILER 变量时,您需要具有该后缀 (-gcc49) 的库。最好遵循@kristian 的回答,将Boost_DEBUG 设置为ON 并查看(在输出中)find_package(Boost) 搜索了哪些确切库
  • 正如我在上面放的 CMake 的图片中所见,它搜索类似的库:“Boost_DATE_TIME_LIBRARY_DEBUG”,其值为:“Boost_DATE_TIME_LIBRARY_DEBUG-NOTFOUND”和其他类似的行。我的库文件位于“C:\Program Files\PCL 1.6.0\3rdParty\Boost\lib”路径中,如下所示:“boost_date_time-vc100-mt-1_49.lib”
  • 它应该以Searching for Boost_DATE_TIME_LIBRARY_RELEASE: 开头,它枚举了precize 库名称。您为 Visual Studio 10.0 准备的库(后缀 vc100)。有关库命名,请参阅 official description

标签: c++ qt boost cmake


【解决方案1】:

所以我解决这个问题的方法是首先运行 Cmake as

cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(pcd_write)
set(Boost_DEBUG ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC ON)
find_package(PCL 1.2 REQUIRED)
include_directories(${PCL_INCLUDE_DIRS})
link_directories(${PCL_LIBRARY_DIRS})
add_definitions(${PCL_DEFINITIONS})
add_executable (pcd_write pcd_write.cpp)
target_link_libraries (pcd_write ${PCL_LIBRARIES})

我看到了底部

Boost include path: C:/Program Files/PCL 1.6.0/3rdParty/Boost/include
Could not find the following static Boost libraries:
    boost_system
    boost_filesystem
    boost_thread
    boost_date_time
    boost_iostreams

我查看了那个文件夹,果然我错过了所有的 boost 文件夹。

可能有更好的解决方案,但我刚刚将最新版本的 Boost 下载到我的计算机上,并用新的文件夹替换了整个 C:/Program Files/PCL 1.6.0/3rdParty/Boost 文件夹,一切都对我有用

【讨论】:

  • 您能准确说出您执行了哪些步骤来修补 boost 库吗?
【解决方案2】:

首先可以放

set(Boost_DEBUG ON)

命令前

FIND_PACKAGE(Boost)

这为您提供了更多输出,并帮助我找到了其他错误的来源。

接下来,我会尝试设置变量BOOST_LIBRARYDIRBOOST_INCLUDEDIR,例如

set(BOOST_LIBRARYDIR "C:/Program Files/PCL 1.6.0/3rdParty/Boost/lib")
set(BOOST_INCLUDEDIR "C:/Program Files/PCL 1.6.0/3rdParty/Boost/include")

【讨论】:

  • 我将这些行添加到文件中,但仍然有错误。你碰巧有一个这样的项目的示例 CMakeList.txt 文件吗?这是我第一次使用 CMake,我不知道它是如何工作的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 2013-09-06
  • 1970-01-01
  • 1970-01-01
  • 2021-12-21
  • 1970-01-01
相关资源
最近更新 更多