Почему gcc не может найти файл opencv.hpp?

#c #opencv #cmake

Вопрос:

Я совсем новичок в CMake, но я хочу создать тестовый .cpp файл, который включает OpenCV и показывает мне изображение. Я встроил OpenCV в путь /usr/local , и у меня здесь есть папка с файлом 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  

Когда я запускаю cmake bash — все в порядке, и даже 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 lt;opencv2/opencv.hppgt;  ^~~~~~~~~~~~~~~~~~~~ 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  

Я нашел вопросы с той же проблемой, но они мне не помогли. Что я делаю не так? В чем может быть причина этого? Спасибо!

Комментарии:

1. Не OPENCV4_INCLUDES должно быть /usr/local/include/opencv4/ ?

2. @G. M. Спасибо за ответ! Но я даже попробовал это сделать. Я перепробовал множество вариантов пути, но они не помогают

3. Используйте OpenCV_INCLUDE_DIRS вместо OPENCV4_INCLUDES и откатите bashrc изменения.

4. @u-235 Спасибо! Это сработало, но теперь у меня есть другие ошибки, когда я делаю такие undefined reference to `cv::imread

5. О чем target_link_libraries(cpp_proj ${OpenCV_LIBS}) ?

Ответ №1:

Чтобы использовать библиотеку, вы должны указать каталог include, а также библиотеки.

С помощью 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})  

Я не верю, что вам когда-либо нужно касаться ~./bashrc при использовании find_package