解决"/usr/include/opencv-3.1.0-dev/opencv"non-existent path问题

在ROS Indigo环境下,手动安装OpenCV3后,编译Whycon时遇到CMake错误,指向不存在的路径。通过修改OpenCVConfig.cmake文件中的路径获取方式,成功解决编译问题。

ros indigo版本需要手动安装opencv3

sudo apt-get install ros-indigo-opencv3

但在编译whycon时,出现错误
CMake Error in whycon/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 not
  provide.

CMake Error in whycon/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 not
  provide.

-- Generating done
-- Build files have been written to: /home/ubuntu/catkin_whycon/build
Invoking "cmake" failed

可以看到"/usr/include/opencv-3.1.0-dev/opencv"路径并不存在。
解决方案:

修改/opt/ros/indigo/share/OpenCV-3.1.0-dev中的OpenCVConfig.cmake文件,修改如下:

113:get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH CACHE)
改成
113:get_filename_component(OpenCV_CONFIG_PATH "${CMAKE_CURRENT_LIST_FILE}" PATH )

即可编译通过
参考链接:http://community.bwbot.org/topic/153/kinetic-opencv-cmake-conf-%E6%96%87%E4%BB%B6%E7%9A%84bug%E4%BF%AE%E5%A4%8D/2
--------------------- 
作者:sunyoop 
来源:优快云 
原文:https://blog.youkuaiyun.com/sunyoop/article/details/79940885 
版权声明:本文为博主原创文章,转载请附上博文链接!

<think> 我们被要求解释命令的输出:`pkg-config --cflags opencv4` 的结果是: `-I/usr/include/opencv4/opencv -I/usr/include/opencv4` 我们需要解释这个输出的含义,特别是每个部分的含义。 然后,按照要求,在最后提出3-5个相关问题。 解释: pkg-config是一个用于管理编译时和链接时标志的工具。 `--cflags` 选项用于获取编译时需要的标志,比如头文件路径(通过`-I`指定)。 输出中的每一部分: 1. `-I/usr/include/opencv4/opencv`:这告诉编译器在编译时搜索头文件时,要包含`/usr/include/opencv4/opencv`目录。 2. `-I/usr/include/opencv4`:同样,这告诉编译器也要包含`/usr/include/opencv4`目录。 这样,当你在代码中包含OpenCV头文件时,比如`#include <opencv2/core.hpp>`,编译器就会在这两个目录中搜索。 注意:在Ubuntu中,OpenCV4通常将头文件安装在`/usr/include/opencv4`目录下,其中`opencv4/opencv2`是实际的头文件子目录,而第一个路径中的`opencv4/opencv`可能是为了兼容旧版本或其他原因。 因此,这个输出意味着编译OpenCV程序时需要使用这两个包含路径。 </think> ### `pkg-config --cflags opencv4` 输出解析 #### 输出含义: `-I/usr/include/opencv4/opencv -I/usr/include/opencv4` 1. **`-I` 标志** 这是gcc/g++编译器的参数,表示添加**头文件搜索路径**。编译器将在这些目录中查找`#include`指令指定的头文件。 2. **路径分解** - `/usr/include/opencv4/opencv` 存放核心模块头文件的实际路径,包含如`core.hpp`、`imgproc.hpp`等具体实现文件 - `/usr/include/opencv4` 存放顶层头文件和模块索引,包含`opencv2`目录(模块化头文件结构) 3. **路径关系** ```bash /usr/include/opencv4 ├── opencv2 # 模块化头文件目录 │ ├── core │ ├── imgproc │ └── ... └── opencv # 兼容性目录(实际头文件存储位置) ├── opencv2 └── ... ``` #### 为什么需要两个路径? 1. **兼容性设计**: - `/usr/include/opencv4` 提供新版模块化包含方式 `#include <opencv2/core.hpp>` - `/usr/include/opencv4/opencv` 支持旧版包含方式 `#include <opencv2/opencv.hpp>` 2. **编译示例**: 当使用 `#include <opencv2/opencv.hpp>` 时,编译器会依次查找: ```text /usr/include/opencv4/opencv → /usr/include/opencv4/opencv/opencv2 /usr/include/opencv4 → /usr/include/opencv4/opencv2 ``` #### 验证路径内容 ```bash # 查看头文件结构 ls /usr/include/opencv4 # 输出:opencv2 opencv(目录) ls /usr/include/opencv4/opencv # 输出:opencv2(链接或目录) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值