cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录

Posted

技术标签:

【中文标题】cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录【英文标题】:cmake error : opencv2/opencv.hpp:opencv2/opencv.hpp:No such file or directory 【发布时间】:2016-06-26 10:09:24 【问题描述】:

我正在用 cmake 编译 opencv 程序。 代码如下:

DisplayImage.cpp:

#include <stdio.h>
#include <opencv2/opencv.hpp>
using namespace cv;
int main(int argc, char** argv )

    if ( argc != 2 )
    
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    

    Mat image;
    image = imread( argv[1], 1 );

    if ( !image.data )
    
        printf("No image data \n");
        return -1;
    
    namedWindow("Display Image", WINDOW_AUTOSIZE );
    imshow("Display Image", image);

    waitKey(0);

    return 0;

CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

project( DisplayImage )

set(OpenCV_DIR /home/lmk/opencv-3.1.0/release)

include_directories( $OpenCV_INCLUDE_DIRS )

add_executable( DisplayImage DisplayImage.cpp )

target_link_libraries( DisplayImage $OpenCV_LIBS )

我将 DisplayImage.cpp 和 CMakeLists.txt 放在我个人主文件夹中名为 test 的文件夹中,即/home/lmk/test/。 然后我使用命令行:

lmk@lmk-virtual-machine:~/test$ mkdir build lmk@lmk-virtual-machine:~/test$ cd build lmk@lmk-virtual-machine:~/test/build$ cmake ..

哪个给我:

-- C 编译器标识为 GNU 5.3.0 -- CXX 编译器标识为 GNU 5.3.0 -- 检查工作的 C 编译器:/usr/bin/cc -- 检查工作的 C 编译器:/usr/bin/cc -- 工作 -- 检测 C 编译器 ABI 信息 -- 检测 C 编译器 ABI 信息 - 完成 -- 检查工作的 CXX 编译器:/usr/bin/c++ -- 检查工作的 CXX 编译器:/usr/bin/c++ -- 工作 -- 检测 CXX 编译器 ABI 信息 -- 检测 CXX 编译器 ABI 信息 - 完成 -- 配置完成 -- 生成完成 -- 构建文件已写入:/home/lmk/test/build

但是当我使用时:

扫描目标DisplayImage的依赖关系 [100%] 构建 CXX 对象 CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o /home/lmk/test/DisplayImage.cpp:2:30: 致命错误:opencv2/opencv.hpp:没有这样的文件或目录 编译终止。 make[2]: * [CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o] 错误 1 make[1]: * [CMakeFiles/DisplayImage.dir/all] 错误 2 make: *** [all] 错误 1

你知道为什么吗? 我在VM的ubuntu 14.04终端使用opencv 3.1.0和cmake 2.8.12.2!

【问题讨论】:

我已经通过修改 CMakeLists.txt 解决了这个错误:cmake_minimum_required(VERSION 2.8) project( DisplayImage ) set(OpenCV_DIR /home/lmk/opencv-3.1.0/release) include_directories( /usr/local/opencv-3.1.0/include ) add_executable( DisplayImage DisplayImage.cpp ) target_link_libraries( DisplayImage /usr/local/opencv-3.1.0/lib ) 。但存在新错误:DisplayImage.cpp:(.text+0x34):undefined reference to ‘cv::imread(cv::String const&amp;, int)’ 【参考方案1】:

为什么不使用“典型”方式,使用find_package()

尝试重复this 教程中的步骤,并报告发生的情况。

【讨论】:

find_package()?你能详细告诉我吗?我在 /usr/local/opencv-3.1.0 中安装了我的 opencv 3.1.0。这是我第一次使用cmake编译。【参考方案2】:

这个问题有点老了,所以我不得不从源代码构建 OpenCV 2:

$ git clone --depth 1 --branch 2.4.13.7 https://github.com/opencv/opencv.git
$ cmake -S opencv -B opencv-build -DCMAKE_BUILD_TYPE=Release -DWITH_CUDA=NO -DCMAKE_INSTALL_PREFIX=$PWD/opencv-install
$ cmake --build opencv-build
$ cmake --install opencv-build

然后我为您的代码编写了以下 CMakeLists.txt:

cmake_minimum_required(VERSION 3.21)
project(test)

find_package(OpenCV 2 REQUIRED)

add_executable(DisplayImage DisplayImage.cpp)
target_link_libraries(DisplayImage PRIVATE $OpenCV_LIBS)

为了构建这个,我简单地运行了:

$ cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DOpenCV_ROOT=$PWD/opencv-install
...
$ cmake --build build/ --verbose
[1/2] /usr/bin/c++  -I/path/to/opencv-install/include/opencv -I/path/to/opencv-install/include -O3 -DNDEBUG -MD -MT CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o -MF CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o.d -o CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o -c /path/to/DisplayImage.cpp
[2/2] : && /usr/bin/c++ -O3 -DNDEBUG  CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o -o DisplayImage  -Wl,-rpath,/path/to/opencv-install/lib  ../opencv-install/lib/libopencv_videostab.so.2.4.13  ../opencv-install/lib/libopencv_ts.a  ../opencv-install/lib/libopencv_superres.so.2.4.13  ../opencv-install/lib/libopencv_stitching.so.2.4.13  ../opencv-install/lib/libopencv_contrib.so.2.4.13  -ldl  -lm  -lpthread  -lrt  -ldl  -lm  -lpthread  -lrt  ../opencv-install/lib/libopencv_nonfree.so.2.4.13  ../opencv-install/lib/libopencv_ocl.so.2.4.13  ../opencv-install/lib/libopencv_gpu.so.2.4.13  ../opencv-install/lib/libopencv_photo.so.2.4.13  ../opencv-install/lib/libopencv_objdetect.so.2.4.13  ../opencv-install/lib/libopencv_legacy.so.2.4.13  ../opencv-install/lib/libopencv_video.so.2.4.13  ../opencv-install/lib/libopencv_ml.so.2.4.13  ../opencv-install/lib/libopencv_calib3d.so.2.4.13  ../opencv-install/lib/libopencv_features2d.so.2.4.13  ../opencv-install/lib/libopencv_highgui.so.2.4.13  ../opencv-install/lib/libopencv_imgproc.so.2.4.13  ../opencv-install/lib/libopencv_flann.so.2.4.13  ../opencv-install/lib/libopencv_core.so.2.4.13 && :

如果您在标准系统位置安装了 OpenCV,则不需要 -DOpenCV_ROOT=$PWD/opencv-install

【讨论】:

以上是关于cmake错误:opencv2/opencv.hpp:opencv2/opencv.hpp:没有这样的文件或目录的主要内容,如果未能解决你的问题,请参考以下文章

cmake/modules/AddLLVM.cmake 处的 CMake 错误

cmake安装mysql编译提示错误,错误提示如下,请大家指教,谢谢!

“CMake 错误:CMake 无法确定目标的链接器语言” 当我 catkin_make ROS 工作空间时出现错误

CMake错误配置opencv

CMake 错误:CMake 无法找到与“Unix Makefiles”对应的构建程序。 CMAKE_MAKE_PROGRAM 未设置

[Tools] [cmake] 调试笔记 --- cmake缓存引起的一个错误