2014-09-16 27 views
12

Ho appena seguito le istruzioni per installare opencv 3 sul mio computer ubuntu (ho già installato ed eseguito programmi usando opencv 3 su un altro dispositivo Linux), tuttavia, quando ho provato a eseguire uno dei miei programmi di test dal mio vecchio computer Ottengo i seguenti errori:Errore di riferimento non definito OpenCV 3.0?

CMakeFiles/VideoTest.dir/VideoTest.cpp.o: In function `main': 
VideoTest.cpp:(.text+0x6f): undefined reference to `cv::VideoWriter::fourcc(char,char,char, char)' 
VideoTest.cpp:(.text+0xc3): undefined reference to `cv::VideoWriter::open(cv::String const&, int, double, cv::Size_<int>, bool)' 
VideoTest.cpp:(.text+0x103): undefined reference to `cv::namedWindow(cv::String const&, int)' 
VideoTest.cpp:(.text+0x146): undefined reference to `cv::VideoCapture::read(cv::_OutputArray const&)' 
VideoTest.cpp:(.text+0x1b1): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)' 
CMakeFiles/VideoTest.dir/VideoTest.cpp.o: In function `cv::String::String(char const*)': 
VideoTest.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x3b): undefined reference to `cv::String::allocate(unsigned int)' 
CMakeFiles/VideoTest.dir/VideoTest.cpp.o: In function `cv::String::~String()': 
VideoTest.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0xd): undefined reference to `cv::String::deallocate()' 
collect2: ld returned 1 exit status 
make[2]: *** [VideoTest] Error 1 
make[1]: *** [CMakeFiles/VideoTest.dir/all] Error 2 
make: *** [all] Error 2 

Qualche idea su cosa sta succedendo? Sono relativamente nuovo a Opencv. Ecco il mio codice di prova per il riferimento:

#include "opencv2/highgui/highgui.hpp" 
#include "opencv2/opencv.hpp" 
#include <iostream> 

using namespace cv; 
using namespace std; 

int main(int argc, char* argv[]){ 
    VideoCapture vCap(0); 
    VideoWriter vWrite; 
    vWrite.open("test.avi", vWrite.fourcc('M','J','P','G'), 20, Size(640, 480), true); 
    while (1) { 
     namedWindow("VideoFeed", WINDOW_AUTOSIZE); 
     Mat frame; 
     vCap.read(frame); 
     vWrite.write(frame); 
     imshow("VideoFeed", frame); 
     char c = waitKey(50); 
     if (c == 27) { 
      break; 
     } 
    } 
    return 0; 
} 

Grazie in anticipo.

Edit: La mia CMakeLists.txt:

cmake_minimum_required(VERSION 2.8) 
project(VideoTest) 
find_package(OpenCV REQUIRED) 
add_executable(VideoTest VideoTest.cpp) 
target_link_libraries(VideoTest ${OpenCV_LIBS}) 
+1

problema simile [Risolto] [http://stackoverflow.com/questions/7816607/opencv-2-3-compiling-issue-undefined-refence-ubuntu-11-10](http://stackoverflow .com/questions/7816607/opencv-2-3-compiling-issue-undefined-refence-ubuntu-11-10) – IEEE754

risposta

24

VideoCapture e VideoWriter siamo trasferiti al modulo videoio a 3.0, quindi bisogna inoltre

#include "opencv2/videoio.hpp" 

anche, non sembra Link qualsiasi librerie OpenCV richiesti, questi sono:

opencv_core, opencv_videoio, opencv_highgui 
+0

Non sono sicuro di cosa intendi collegando le librerie opencv richieste. Potresti dirmi come farlo in particolare? – potatoprogrammer

+0

non ci hai detto il tuo os, il compilatore usato, anche tu sembri usare cmake per generare cose, quindi per favore aggiungi il cmakelists.txt alla tua domanda, quindi ripetiamolo – berak

+0

La mia versione os è Ubuntu 12.04.5 LTS, e sto usando cmake 2.8.7 e gcc 4.6.3. Aggiunto il mio CMakeLists.txt nella mia domanda. – potatoprogrammer

3

Va bene, finalmente ho capito cosa sta succedendo. Qualcosa internamente nella cartella CMakeFiles è diventato fasullo quando ho spostato la directory sul mio nuovo sistema. Rimozione di tutti i file/directory oltre al file .cpp del progetto e al file CMakeLists.txt e in esecuzione "cmake". e "make" di nuovo sembra risolvere il problema.

0

Sotto il file cmake funziona per me.

cmake_minimum_required(VERSION 3.5) 
project(ImageProcessing) 

set(CMAKE_CXX_STANDARD 14) 
find_package(OpenCV REQUIRED) 
include_directories(${OpenCV_INCLUDE_DIRS}) 
set(SOURCE_FILES main.cpp) 
add_executable(ImageProcessing ${SOURCE_FILES}) 
target_link_libraries(ImageProcessing ${OpenCV_LIBS}) 
# Print some message showing some of them 
message(STATUS "OpenCV library status:") 
message(STATUS " version: ${OpenCV_VERSION}") 
message(STATUS " libraries: ${OpenCV_LIBS}") 
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}") 
Problemi correlati