【问题标题】:Why does gcc can't find opencv.hpp file?为什么 gcc 找不到 opencv.hpp 文件?
【发布时间】:2021-12-09 20:23:03
【问题描述】:

我对 CMake 还很陌生,但我想构建一个测试 .cpp 文件,其中包含 OpenCV 并向我显示图像。我在路径 /usr/local 中构建了 OpenCV,并且这里有带有 opencv.hpp 文件的文件夹 - /usr/local/include/opencv4/opencv2/opencv.hpp。这是我的 CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.0)
project(cpp_proj)

find_package(OpenCV REQUIRED)

add_executable(cpp_proj opencv_cpp.cpp)

include_directories(${OPENCV4_INCLUDES})
target_link_libraries(cpp_proj )

我打开~./bashrc 并在那里添加了几行:

export OPENCV4_INCLUDES=/usr/local/include/
export OPENCV4_LIBRARIES=/usr/local/lib/

export PATH=$PATH:$OPENCV4_LIBRARIES
export PATH=$PATH:$OPENCV4_INCLUDES

当我在 bash 中运行 cmake 时 - 一切正常,甚至 find_package 都能找到 OpenCV。但是当我尝试运行 make 时,它给了我一个错误:

pi@raspberrypi:~/Desktop/cpp_proj/build $ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/pi/Desktop/cpp_proj/build
pi@raspberrypi:~/Desktop/cpp_proj/build $ make
[ 50%] Building CXX object CMakeFiles/cpp_proj.dir/opencv_cpp.cpp.o
/home/pi/Desktop/cpp_proj/opencv_cpp.cpp:1:10: fatal error: opencv2/opencv.hpp: No such file or directory
 #include <opencv2/opencv.hpp>
          ^~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/cpp_proj.dir/build.make:63: CMakeFiles/cpp_proj.dir/opencv_cpp.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:76: CMakeFiles/cpp_proj.dir/all] Error 2
make: *** [Makefile:84: all] Error 2

我发现了同样问题的问题,但它们没有帮助我。我做错了什么?这可能是什么原因?谢谢!

【问题讨论】:

  • 不应该OPENCV4_INCLUDES/usr/local/include/opencv4/ 吗?
  • @G.M.感谢您的回答!但我什至试过这个。我尝试了很多路径变体,但它们没有帮助
  • 使用 OpenCV_INCLUDE_DIRS 代替 OPENCV4_INCLUDES 并回滚 bashrc 更改。
  • @u-235 谢谢!那行得通,但是现在当我像undefined reference to `cv::imread make 时出现其他错误
  • target_link_libraries(cpp_proj ${OpenCV_LIBS}) 呢?

标签: c++ opencv cmake


【解决方案1】:

为了使用库,您必须指定包含目录以及库。

使用 find_package(在模块模式下),在您的情况下,它应该填充变量 OpenCV_INCLUDE_DIRS 和 OpenCV_LIBS 供您使用。

所以我建议添加/更改您的代码以添加包含目录并链接库(如下所示)

target_include_directories(${CMAKE_PROJECT_NAME} public ${OpenCV_INCLUDE_DIRS})
target_link_libraries(${CMAKE_PROJECT_NAME} public ${OpenCV_LIBS})

我不相信你在使用 find_package 时不需要触摸 ~./bashrc

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 2011-12-14
    • 2010-10-12
    • 1970-01-01
    相关资源
    最近更新 更多