2014-09-16 7 views
12

Я только что выполнил инструкции по установке opencv 3 на моем компьютере ubuntu (я уже установил и запустил программы с использованием opencv 3 на другом устройстве linux), однако, когда я попытался запустить одну из своих тестовых программ с моего старый компьютер Я получаю следующие ошибки:Неопределенная ошибка ссылки 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 

Любая идея, что происходит? Я относительно новичок в opencv. Вот мой тестовый код для справки:

#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; 
} 

Заранее спасибо.

Edit: Мой 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

Похожие Issue [Решено] [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

ответ

24

VideoCapture и VideoWriter были перенесены в модуль videoio в 3.0, так что вам придется дополнительно

#include "opencv2/videoio.hpp" 

также, вы, кажется, не ссылка в любой из требуемых OpenCV LIBS, те:

opencv_core, opencv_videoio, opencv_highgui 
+0

Я не уверен, что вы подразумеваете, связавшись с необходимыми файлами opencv. Не могли бы вы рассказать мне, как это сделать? – potatoprogrammer

+0

вы не сказали нам свой os, используемый компилятор, и вы, похоже, используете cmake для генерации вещей, поэтому, пожалуйста, добавьте cmakelists.txt к вашему вопросу, а затем давайте повторить итерацию – berak

+0

Моя версия os - Ubuntu 12.04.5 LTS, и я использую cmake 2.8.7 и gcc 4.6.3. В мой вопрос добавлен мой CMakeLists.txt. – potatoprogrammer

3

Хорошо, я наконец понял, что происходит. Что-то внутренне в папке CMakeFiles пришло в очередь, когда я переместил каталог в свою новую систему. Удаление всех файлов/каталогов, кроме файла .cpp проекта и файла CMakeLists.txt, и запуск «cmake». и «make» снова, похоже, решает проблему.

0

Ниже файл cmake работает для меня.

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}") 
Смежные вопросы