find_package openni 出错解决方法
1.ORB_SLAM2 实战中http://www.cnblogs.com/gaoxiang12/p/5161223.html,编译安装pangolin出现了一系列的oepnni相关问题。
解决方法:由于openni为optional dependencies 所以可以考虑注释掉 openni依赖,文件路径 pangolin/src/CmakeLists.txt
2.用openni驱动kinect1时,find_package 无法找到openni package
原因分析:
find_package()包括 module模式和config模式
module 模式会在module 路径下查找FindOpenNI.cmake,首先搜索${CMAKE_MODULE_PATH}中的所有路径,然后搜索自带.cmake即 <CMAKE_ROOT>/share/cmake-2.8/Modules,本系统为/usr/share/cmake-2.8/Modules。如果没有找到文件,则进入config模式。
Config 模式,继续搜索<Name>config.cmake 或<low-case-name>config.cmake文件,这两个文件是安装库自动安装的。
find_package(OpenNI),在module模式和config模式没有找到相关文件。
解决方法:
1) 新建kinect_test\cmake_modules\FindOpenNI.cmake
CMAKE_MINIMUM_REQUIRED( VERSION 2.8 ) #CMAKE版本要求
MESSAGE(STATUS "USING BUNDLED FindOpenNI.cmake ...")
FIND_PATH(OPENNI_INCLUDE_DIR NAMES XnCppWrapper.h
PATHS
/usr/include/ni
)
FIND_LIBRARY(OPENNI_LIBRARY_DIR NAMES OpenNI
PATHS
/usr/lib
)
2)编辑kinect_test\src\CmakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION2.8)#设定版本
#增加opencv的依赖
FIND_PACKAGE(OpenCV REQUIRED)
#添加头文件和库文件
LIST(APPENDCMAKE_MODULE_PATH${PROJECT_SOURCE_DIR}/cmake_modules)
find_package(OpenNI REQUIRED)
IF(OPENNI_INCLUDE_DIRANDOPENNI_LIBRARY_DIR)
MESSAGE(STATUS"FoundOpenNIlib")
INCLUDE_DIRECTORIES(${OPENNI_INCLUDE_DIR} )
MESSAGE(STATUS"includediris"${OPENNI_INCLUDE_DIR})
MESSAGE(STATUS"libdiris"${OPENNI_LIBRARY_DIR})
ADD_EXECUTABLE(kinect_testkinect_test.cpp)
TARGET_LINK_LIBRARIES(kinect_test
${OpenCV_LIBS}
${OPENNI_LIBRARY_DIR})
ENDIF(OPENNI_INCLUDE_DIRANDOPENNI_LIBRARY_DIR)
Reference:
http://www.ibm.com/developerworks/cn/linux/l-cn-cmake/
http://blog.csdn.net/dbzhang800/article/details/6329314