#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