2012-02-01 6 views
17

У меня есть файл только с импортом:компиляции OpenCV в C++

#include <iostream> 
#include <stdio.h> 

#include "cxcore.hpp" 
#include "highgui.hpp" 

using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 

} 

и я пытаюсь скомпилировать с г ++ -I/USR/включать/OpenCV -lopencv -lm m.cpp

но получить капелька ошибка:

In file included from /usr/include/opencv/cxcore.hpp:46, from m.cpp:5: /usr/include/opencv/cxmisc.h:214: error: expected constructor, destructor, or type conversion before ‘void’ /usr/include/opencv/cxmisc.h:220: error: expected constructor, destructor, or type conversion before ‘int’ /usr/include/opencv/cxmisc.h:226: error: ‘CV_INLINE’ does not name a type /usr/include/opencv/cxmisc.h:516: error: ‘CV_DEPTH_MAX’ was not declared in this scope /usr/include/opencv/cxmisc.h:522: error: ‘CV_DEPTH_MAX’ was not declared in this scope /usr/include/opencv/cxmisc.h:522: error: ‘CV_CN_MAX’ was not declared in this scope In file included from m.cpp:5: /usr/include/opencv/cxcore.hpp:70: error: template declaration of ‘cv::CV_EXPORTS cv::Size_’ /usr/include/opencv/cxcore.hpp:71: error: template declaration of ‘cv::CV_EXPORTS cv::Point_’ /usr/include/opencv/cxcore.hpp:72: error: template declaration of ‘cv::CV_EXPORTS cv::Rect_’ /usr/include/opencv/cxcore.hpp:77: error: expected initializer before ‘fromUtf16’ /usr/include/opencv/cxcore.hpp:78: error: expected initializer before ‘toUtf16’ /usr/include/opencv/cxcore.hpp:80: error: expected initializer before ‘format’ /usr/include/opencv/cxcore.hpp:82: error: expected initializer before ‘:’ token m.cpp:38: error: expected ‘}’ at end of input

это мой copencv Lib содержание:

[email protected]:~$ ls /usr/include/opencv/ 
cvaux.h cvcompat.h cv.hpp  cvtypes.h cvvidsurv.hpp cxcore.h cxerror.h cxmat.hpp cxoperations.hpp highgui.h ml.h 
cvaux.hpp cv.h  cvinternal.h cvver.h cvwimage.h  cxcore.hpp cxflann.h cxmisc.h cxtypes.h   highgui.hpp 

i'm on ubuntu 10.10

ответ

39

Вам необходимо правильно включить заголовки -I (столица i) и библиотеки -l (нижний регистр L).

На новейших версиях OpenCV вы должны сделать:

#include <cv.h> 
#include <highgui.h> 

А затем попытаться скомпилировать его с:

g++ m.cpp -o app `pkg-config --cflags --libs opencv` 

Примечание: если вы выполняете только pkg-config --cflags --libs opencv в командной строке вы увидите путей и библиотек, которые необходимо включить в командную строку g ++.

+0

вздохнув. это компилируется, но остаётся в стороне от этой проблемы. http://stackoverflow.com/q/9088228/433685 – nkint

+0

(проблема, которую я решил решить, изменив заголовок ..) – nkint

+0

Я всегда забываю имя утилиты pkg-config. Спасибо за простое решение! – aaronsnoswell

3

если среда разработки не pkg-config и из-за этого accepted answer by karlphilip не практично, или, что вам нужно знать минимальный набор библиотек необходимых для связи вашего приложения, то при условии, такого кода

#include <cv.h> 
#include <highgui.h> 

int main() 
{ 
    return 0; 
} 

вы можете добавить библиотеку аргументы из следующего списка последовательно сверху, пока не найдете минимальный набор аргументов, что вам нужно:

 
    -lopencv_core 
    -lopencv_imgproc 
    -lopencv_highgui 
    -lopencv_ml 
    -lopencv_video 
    -lopencv_features2d 
    -lopencv_calib3d 
    -lopencv_objdetect 
    -lopencv_contrib 
    -lopencv_legacy 
    -lopencv_flann 

Например, исходный C-код указан в верхней части этого поста ком сваи и ссылки чисто с

gcc hello.c -o hello \ 
    -I /usr/include/opencv \ 
    -L /usr/lib \ 
    -lopencv_core \ 
    -lopencv_imgproc 

на моем старом окне x86_64 Ubuntu 12.04.

Предполагая, что C++ код, такой как

#include "core/core.hpp" 
#include "highgui/highgui.hpp" 

using namespace cv; 
using namespace std; 

int main(int argc, char** argv) 
{ 
    return 0; 
} 

, то вы бы скомпилировать и связь с

g++ hello.cpp -o hello \ 
    -I /usr/include/opencv2 \ 
    -L /usr/lib \ 
    -lopencv_core \ 
    -lopencv_imgproc 
+0

Я попытался скомпилировать версию g ++ из видео этого парня https://www.youtube.com/watch?v=cgo0UitHfp8 в командной строке, потому что я хотел попробовать его без VS. Он компилируется, но когда я запускаю программу, ничего не происходит. – luckyging3r

+0

Nevermind, это недостающая проблема с файлами dll windows. Спасибо за ваш ответ выше. – luckyging3r

+0

Мне нужно добавить opencv_contrib, но он не входит в список пакетов, так как я вижу его, используя команду pkg-config --libs opencv. – speedious

Смежные вопросы