Нет такой ошибки файла или каталога при компиляции файла C ++ с заголовками OpenCV

Я на Red Hat Linux. У меня есть (возможно, новичок) проблема с включениями в файле C ++. Я создал следующий простой скрипт OpenCV,

#include "opencv2/highgui/highgui.hpp"using namespace cv;

int main(int argc, char ** argv){
Mat img = imread( argv[1], -1 );
if ( img.empty() ) return -1;
namedWindow( "Example1", cv::WINDOW_AUTOSIZE );
imshow( "Example1", img );
waitKey( 0 );
destroyWindow( "Example1" );
}

Затем в терминал я вошел

g++ my_simple_script.cpp

и получил ошибки

newfile.cpp:1:39: error: opencv2/highgui/highgui.hpp: No such file or directory
newfile.cpp:3: error: 'cv' is not a namespace-name
newfile.cpp:3: error: expected namespace-name before ';' token
newfile.cpp: In function 'int main(int, char**)':
newfile.cpp:6: error: 'Mat' was not declared in this scope
newfile.cpp:6: error: expected ';' before 'img'
newfile.cpp:7: error: 'img' was not declared in this scope
newfile.cpp:8: error: 'cv' has not been declared
newfile.cpp:8: error: 'namedWindow' was not declared in this scope
newfile.cpp:9: error: 'img' was not declared in this scope
newfile.cpp:9: error: 'imshow' was not declared in this scope
newfile.cpp:10: error: 'waitKey' was not declared in this scope
newfile.cpp:11: error: 'destroyWindow' was not declared in this scope

я добавил

/home/m/maxwell9/2.4.3/include

в мой путь, где 2.4.3 указывает версию OpenCV, которую я использую.
Когда я печатаю

echo $PATH

я вижу

/opt/apps/jdk1.6.0_22.x64/bin:/apps/smlnj/110.74/bin:/usr/local/cuda/bin:/sbin:/bin:/usr/sbin:/usr/bin:/apps/weka/3.7.12:/home/m/maxwell9/bin:/home/m/maxwell9/2.4.3/include

Я подтвердил, что есть файл в

/home/m/maxwell9/2.4.3/include/opencv2/highgui/highgui.hpp

1

Решение

Просто добавление пути включения только решит вашу проблему компиляции. Вы по-прежнему будете видеть ошибки компоновщика .. (и правильный способ добавления пути включения использует флаг -I, PATH для этого не используется ..)

Чтобы успешно скомпилировать и связать вашу программу, вам нужно будет указать путь «Включить» для файлов заголовков и путь компоновщика для предварительно скомпилированных библиотек OpenCV и список библиотек, которые будут связаны …

  1. Стандартным способом, если вы установили openCV в стандартный каталог установки, используя следующую последовательность

     sudo make install (from your OpenCV build library)
    echo '/usr/local/lib' | sudo tee -a /etc/ld.so.conf.d/opencv.conf
    sudo ldconfig
    printf '# OpenCV\nPKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig\nexport PKG_CONFIG_PATH\n' >> ~/.bashrc
    source ~/.bashrc
    

следующее скомпилировало бы и связало бы вашу программу успешно для вас:

g++ my_simple_script.cpp `pkg-config --libs opencv` `pkg-config --cflags opencv`
  1. Но, видимо, вы этого не сделали … поскольку вы пытаетесь указать на нестандартный путь включения. Следовательно, в вашем случае вам нужно будет явно указать путь включения, используя -I флаг и ваш предварительно скомпилированный путь к библиотеке -L отметьте и перечислите все отдельные библиотеки, которые вы можете использовать, используя -l<name_of_library>

    g++ my_simple_script.cpp -I /home/m/maxwell9/2.4.3/include -L /home/m/maxwell9/2.4.3/<your build directory name>/lib/ -lopencv_core
    

(список других библиотек openCV, которые вам могут понадобиться, должен быть добавлен к вышеуказанной команде в формате: -l<name of the lib you need>)

3

Другие решения

PATH не имеет значения, вам нужно добавить пути включения в пути включения компилятора (параметр -I в gcc). Или в переменную окружения CPLUS_INCLUDE_PATH.

1

По вопросам рекламы [email protected]