本文共 1809 字,大约阅读时间需要 6 分钟。
原链接:
在 kinetic 版本的 ros 中,系统自带了OpenCV 3.1。但是如果直接通过cmake文件引用的话可能会出现错误。
Imported target "opencv_xphoto" includes non-existent path"/usr/include/opencv-3.1.0-dev/opencv"in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:The path was deleted, renamed, or moved to another location.An install or uninstall procedure did not complete successfully.The installation package was faulty and references files it does notprovide.CMake Error in m-explore/map_merge/CMakeLists.txt:Imported target "opencv_xphoto" includes non-existent path"/usr/include/opencv-3.1.0-dev/opencv"in its INTERFACE_INCLUDE_DIRECTORIES. Possible reasons include:The path was deleted, renamed, or moved to another location.An install or uninstall procedure did not complete successfully.The installation package was faulty and references files it does notprovide.
不止我一个人遇到这个错误。可以看, 但是这个是在jade版本的OpenCV 3里面。
最后找到了原因在OpenCV的conf.cmake文件里面的一个配置。在/opt/ros/kinetic/share/OpenCV-3.1.0-dev/OpenCVConfig.cmake
里面的第144行和116行
# Extract the directory where *this* file has been installed (determined at cmake run-time)if(CMAKE_VERSION VERSION_LESS "2.8.12") get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH CACHE)else() get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY CACHE)endif()
把其中的CACHE去掉,改成下面的样子
# Extract the directory where *this* file has been installed (determined at cmake run-time)if(CMAKE_VERSION VERSION_LESS "2.8.12") get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH)else() get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" DIRECTORY)endif()
如果加CACHE
,OpenCV的路径就会定位到/usr/
。不加CACHE
就会正确定位。不知道是为什么。原则上说CACHE
只是把路径加到缓存里面,可以提高效率,应该不会出这个问题。难道是由于系统装了其他版本的OpenCV所以CACHE出了问题?经过我搜索发现并不是所有的人都遇到这个问题,看来还是和本地的环境配置有关系。
反正如上的方法是可以解决问题 :-D
转载地址:http://ofdvb.baihongyu.com/