2016-04-17 163 views
1

我試圖從這裏https://github.com/uji-ros-pkg/visualization_osg編譯ROS OSG項目,並不斷收到以下錯誤:未定義參考OpenSceneGraph的

CMakeFiles/osg_interactive_markers_demo.dir/examples/osg_interactive_markers_demo.cpp.o: In function `main': 
/home/user/catkin_ws/src/visualization_osg/osg_interactive_markers/examples/osg_interactive_markers_demo.cpp:28: undefined reference to `osgViewer::View::addEventHandler(osgGA::EventHandler*)' 
/home/user/catkin_ws/src/visualization_osg/osg_interactive_markers/examples/osg_interactive_markers_demo.cpp:29: undefined reference to `osgViewer::View::addEventHandler(osgGA::EventHandler*)' 
/home/user/catkin_ws/devel/lib/libosg_utils.so: undefined reference to `osg::NodeVisitor::NodeVisitor(osg::NodeVisitor const&, osg::CopyOp const&)' 
/home/user/catkin_ws/devel/lib/libosg_interactive_markers.so: undefined reference to `osg::Group::removeChild(osg::Node*)' 
/home/user/catkin_ws/devel/lib/libosg_utils.so: undefined reference to `osg::NodeVisitor::apply(osg::Geometry&)' 
/home/user/catkin_ws/devel/lib/libosg_interactive_markers.so: undefined reference to `osg::Group::getNumChildren() const' 
/home/user/catkin_ws/devel/lib/libosg_utils.so: undefined reference to `osg::NodeVisitor::apply(osg::Drawable&)' 

根據我的理解應該有一個鏈接的問題,但我不能找到一種方法要解決這個問題。我的CMake文件看起來如下:

cmake_minimum_required(VERSION 2.8.3) 
project(osg_interactive_markers) 

find_package(catkin REQUIRED COMPONENTS roscpp tf interactive_markers) 

find_package(osg_utils REQUIRED) 
find_package(osg_markers REQUIRED) 
find_package(OpenSceneGraph REQUIRED COMPONENTS osgSim osgUtil osgDB osgFX osgGA osgTerrain osgViewer osgText osgWidget osgManipulator osg) 

catkin_package(
INCLUDE_DIRS include 
LIBRARIES ${PROJECT_NAME} 
CATKIN_DEPENDS 
    roscpp 
    tf 
    interactive_markers 
DEPENDS 
    osg_markers 
    osg_utils 
    libopenscenegraph 
) 

include_directories(include ${catkin_INCLUDE_DIRS} ${osg_utils_INCLUDE_DIRS} ${osg_markers_INCLUDE_DIRS} ${OpenSceneGraph_INCLUDE_DIRS}) 
add_library(${PROJECT_NAME} 
    src/interactive_marker_client.cpp 
    src/interactive_marker_display.cpp 
    src/interactive_marker.cpp 
    src/interactive_marker_control.cpp 
    src/draggers.cpp 
) 

target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES} ${OSGUTILS_LIBRARIES} ${OSGMARKERS_LIBRARIES} -lGLU) 

add_executable(osg_interactive_markers_demo examples/osg_interactive_markers_demo.cpp) 
target_link_libraries(osg_interactive_markers_demo ${PROJECT_NAME} ${catkin_LIBRARIES} ${OPENSCENEGRAPH_LIBRARIES} ${OSGUTILS_LIBRARIES} ${OSGMARKERS_LIBRARIES} -lGLU) 

add_dependencies(${PROJECT_NAME} ${catkin_EXPORTED_TARGETS}) 

configure_file(osgInteractiveMarkersConfig.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/lib/${CMAKE_PROJECT_NAME}Config.cmake @ONLY) 

install(FILES ${CMAKE_CURRENT_BINARY_DIR}/lib/${CMAKE_PROJECT_NAME}Config.cmake 
     DESTINATION share/${CMAKE_PROJECT_NAME}) 

install(
TARGETS 
osg_interactive_markers_demo 
${PROJECT_NAME} 
ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 
LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 
RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 
) 
install(DIRECTORY include/${PROJECT_NAME} 
DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION}) 

任何想法可以在這裏做什麼?我是OSG的新手,我非常感謝你的幫助。

回答

0

您沒有針對正確的OSG鏈接庫。

我無法對你提到的具體項目GitHub的評論,但總的來說,如果你正在使用的自帶的OSG分佈FindOSG.cmake模塊,你應該

FIND_PACKAGE(OSG REQUIRED) 

,然後鏈接調用它像

OSG_LIBRARY 
OSGUTIL_LIBRARY 
OSGGA_LIBRARY 
etc... 

沒有定義 「全局」 OPENSCENEGRAPH_LIBRARIES符號的具體OSG庫,看到FindOSG.cmake

+0

感謝您的回覆@ rickyviking!我使用FindOpenSceneGraph.cmake [鏈接](https://cmake.org/cmake/help/v3.0/module/FindOpenSceneGraph.html),根據它可以使用OPENSCENEGRAPH_LIBRARIES – Etimr

1

習題lem解決了,原因是錯誤的(雙)安裝OSG