Как исправить фатальную ошибку: opencv2/core.hpp: нет такого файла или каталога для opencv4, установленного в manjaro

По сути, я смог нормально установить openCV для python, но я также хочу сделать это для C++. Я смог установить его с помощью диспетчера пакетов моего дистрибутива Linux (pacman для manjaro, который основан на архитектуре), но я не получил следующую программу для тестирования openCV

#include <iostream>
#include <opencv2/core.hpp>

int main() {
   std::cout << "OpenCV version: " << CV_VERSION << std::endl;
   return 0;
}

Ошибка, которую я получаю при попытке скомпилировать эту программу, следующая:

cv.cpp:2:10: fatal error: opencv2/core.hpp: No such file or directory
    2 | #include <opencv2/core.hpp>
      |          ^~~~~~~~~~~~~~~~~~
 compilation terminated.

По-видимому, это распространенная ошибка, однако я пробовал много решений, и все они, похоже, не работают. Я знаю, где находится core.hpp, и на самом деле он находится в /usr/local/include/opencv4/opencv2/core.hpp. Однако, когда я изменяю оператор включения на

 #include opencv4/opencv2/core.hpp

Я получаю следующую ошибку

 In file included from cv.cpp:2:
 /usr/include/opencv4/opencv2/core.hpp:52:10: fatal error: opencv2/core                /cvdef.h: No such file or directory
   52 | #include "opencv2/core/cvdef.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~
 compilation terminated.

Указание на то, что все каталоги путей к файлам заголовков неверны по существу. Я попытался исправить это с помощью следующей символической ссылки, но это тоже не сработало:

$ sudo ln -s /usr/local/include/opencv4/opencv2/ /usr/local/include/opencv2

Я также попытался скомпилировать следующим образом:

$ g++ -o cv cv.cpp -I/usr/local/include/opencv4 -Lusr/local/lib -lopencv_core

Это также не сработало и дало мне те же ошибки. Для справки, вот как я скомпилировал ранее:

$ g++ cv.cpp -o cv

Я тоже не знаю, означает ли это что-нибудь, но

$ pkg-config --libs opencv4

дает мне следующие результаты:

-lopencv_gapi -lopencv_stitching -lopencv_aruco -lopencv_bgsegm     -lopencv_bioinspired -lopencv_ccalib -lopencv_cvv -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_dpm -lopencv_highgui -lopencv_face -lopencv_freetype -lopencv_fuzzy -lopencv_hdf -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_datasets -lopencv_text -lopencv_dnn -lopencv_plot -lopencv_videostab -lopencv_video -lopencv_videoio -lopencv_viz -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core 

Хотя я понятия не имею, что это значит, и не знаю, помогает ли это мне вообще. Я бы предпочел не иметь никаких других косвенных решений. Любые идеи о том, как это исправить?


person Notemaster    schedule 20.10.2019    source источник


Ответы (4)


Извините ребята. Нашел свой собственный ответ. Для меня это был правильный способ компиляции:

  g++ cv.cpp -o cv -I/usr/include/opencv4
person Notemaster    schedule 20.10.2019

Если вы используете CMake, вы также можете попросить

find_package (OpenCV 4.0.0 REQUIRED)
include_directories ("/usr/include/opencv4/")
person Patrizio Bertoni    schedule 26.04.2021

Попробуйте скомпилировать его с помощью этого:

FLAGS="$(pkg-config --cflags --libs opencv4)"
g++ cv.cpp -o cv $FLAGS
person Sebastian Borquez Gonzalez    schedule 24.07.2020

Я использую кодовые блоки, и чтобы исправить это, я просто скопировал /usr/include/opencv4 в /usr/include/opencv2. Ленивый такой :)

person Jablondyn    schedule 15.11.2019