首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cmake的“未定义的对`boost::system::generic_category()的引用”

使用cmake的“未定义的对`boost::system::generic_category()的引用”
EN

Stack Overflow用户
提问于 2016-01-07 08:26:46
回答 1查看 656关注 0票数 1

我尝试在qtcreator(windows)中与 Cmake 一起使用boost,Cmake可以成功地找到boost "system“和”线程“,但是编译时存在”未定义的对`boost::system::generic_category()的引用“问题。我搜索了这样的问题,添加了"-lboost_system“可能是一个解决方案,但是我的项目中没有".pro"文件,所以如何在CMakeLists中添加它。下面是我的CmakeLists的一部分:

代码语言:javascript
复制
project(demo)
cmake_minimum_required(VERSION 2.8.9)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(DEBUG_FLAG _d)

set(CMAKE_AUTOMOC ON)
find_package(Qt5Gui REQUIRED)
find_package(Qt5Core REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Quick REQUIRED)
find_package(Qt5Qml REQUIRED)
find_package(Qt5Declarative)

find_package(OpenGL REQUIRED)
find_package(Boost 1.58 REQUIRED COMPONENTS system thread)
include_directories(${Boost_INCLUDE_DIR})
link_directories(${Boost_LIBRARY_DIRS})

set(OGRE_RESOURCE_FOLDER ${PROJECT_SOURCE_DIR}/resources)
set(OGRE_HOME "D:/3rd/OGRE")
set(OGRE_PLUGIN_FOLDER "${OGRE_HOME}\\bin")
include_directories(
"${OGRE_HOME}\\include"
"${OGRE_HOME}\\include\\OGRE"
"${OGRE_HOME}\\include\\OGRE\\RenderSystems\\GL"
"${OGRE_HOME}\\boost")
link_directories(${LINK_DIRECORIES} "${OGRE_HOME}\\lib"       "${OGRE_HOME}\\lib\\opt")


include_directories("C:/3rd/Eigen" "C:/3rd/robotics/include" "D:/3rd/Eigen"     "D:/3rd/robotics/include")
link_directories("C:/3rd/robotics/lib" "D:/3rd/robotics/lib")
add_library(robot src/robot.cpp)

add_library(QOgre src/QOgreWidget.cpp)
qt5_use_modules(QOgre OpenGL Widgets Xml)


add_executable(OGREDemo src/QOgreWidgetDemo.cpp src/ogredemo.cpp )
qt5_use_modules(OGREDemo OpenGL Widgets Xml)
target_link_libraries(OGREDemo ${OPENGL_LIBRARIES} ${BOOST_LINK_LIBS_DEBUG}
OgreMain${DEBUG_FLAG} OIS${DEBUG_FLAG}
orocos-kdl${DEBUG_FLAG} robot QOgre )

file(GLOB_RECURSE QMLS "." "*.qml")
qt5_add_resources(RESOURCES_ADDED resources/qml.qrc)
set_source_files_properties(${RESOURCE_ADDED} PROPERTIES GENERATED ON)
add_executable(recat src/main.cpp src/QmlOgre.cpp ${RESOURCES_ADDED}        ${QMLS})
qt5_use_modules(recat Widgets Xml Quick Qml Core Gui Declarative)
target_link_libraries(recat ${OPENGL_LIBRARIES} ${BOOST_LINK_LIBS_DEBUG}
OgreMain${DEBUG_FLAG} OIS${DEBUG_FLAG} RenderSystem_GL${DEBUG_FLAG}
orocos-kdl${DEBUG_FLAG} robot)

configure_file (
"${PROJECT_SOURCE_DIR}/plugins.cfg.in"
"${PROJECT_BINARY_DIR}/plugins.cfg"
)

configure_file (
"${PROJECT_SOURCE_DIR}/resources.cfg.in"
"${PROJECT_BINARY_DIR}/resources.cfg"
)

以及详细的问题描述:

代码语言:javascript
复制
D:\3rd\robotics_android\src\QOgreWidgetDemo.cpp:-1: error: undefined reference to `boost::system::generic_category()'

error: CMakeFiles\OGREDemo.dir/objects.a(QOgreWidgetDemo.cpp.obj): bad reloc address 0x1b in section `.text$_ZNK5boost6system10error_code7messageEv[__ZNK5boost6system10error_code7messageEv]'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-07 13:38:13

要链接的正确变量是Boost_SYSTEM_LIBRARY_DEBUG。正如@usr1234567所述,没有必要使用link_directories。

有关参考资料,请参阅:https://cmake.org/cmake/help/v3.0/module/FindBoost.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34650385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档