Автор Тема: OpenCV tutorial  (Прочитано 864 раз)

Оффлайн spike_spb

  • Давно тут
  • **
  • Сообщений: 41
    • Email
OpenCV tutorial
« : 26.06.2016 15:36:48 »
Всем привет.
Помогите разобраться, почему не собирается туториал по OpenCV: http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html#linux-gcc-usage

У меня p8 (обновленный c p7).

Установил пакеты:
  • libopencv2.4
  • libopencv2.4-doc
  • libopencv2.4-examples
  • libopencv2.4-utils
  • libopencv-devel

В ходе туториала создал файлы:
DisplayImage.cpp
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace cv;
using std::cout;
using std::endl;

int main(int argc, char **argv) {
if (argc != 2) {
cout << "Usage: DisplayImage.out <Image_Path>" << endl;
return -1;
}

Mat image;
image = imread(argv[1], 1);

if (!image.data) {
cout << "No image data" << endl;
}

namedWindow("Display Image", WINDOW_AUTOSIZE);
imshow("Display Image", image);

waitKey(0);

return 0;
}
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )

find_package(OpenCV REQUIRED)

add_executable( ${PROJECT_NAME} DisplayImage.cpp )
target_link_libraries( ${PROJECT_NAME} ${OpenCV_LIBS} )

В консоли набираю:
cmake .
make

Появляются ошибки:
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `main':
DisplayImage.cpp:(.text+0xa4): undefined reference to `cv::imread(std::string const&, int)'
DisplayImage.cpp:(.text+0x144): undefined reference to `cv::namedWindow(std::string const&, int)'
DisplayImage.cpp:(.text+0x1b5): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [DisplayImage] Ошибка 1
make[1]: *** [CMakeFiles/DisplayImage.dir/all] Ошибка 2
make: *** [all] Ошибка 2

Если набрать make VERBOSE=1, то видим:
make: *** [all] Ошибка 2
[jetbird@comp-core-i5-4210u-715a66 opencv-test]$ make VERBOSE=1
/usr/bin/cmake -H/home/jetbird/workspace/opencv-test -B/home/jetbird/workspace/opencv-test --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/jetbird/workspace/opencv-test/CMakeFiles /home/jetbird/workspace/opencv-test/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Вход в каталог `/home/jetbird/workspace/opencv-test'
make -f CMakeFiles/DisplayImage.dir/build.make CMakeFiles/DisplayImage.dir/depend
make[2]: Вход в каталог `/home/jetbird/workspace/opencv-test'
cd /home/jetbird/workspace/opencv-test && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test/CMakeFiles/DisplayImage.dir/DependInfo.cmake --color=
make[2]: Выход из каталога `/home/jetbird/workspace/opencv-test'
make -f CMakeFiles/DisplayImage.dir/build.make CMakeFiles/DisplayImage.dir/build
make[2]: Вход в каталог `/home/jetbird/workspace/opencv-test'
Linking CXX executable DisplayImage
/usr/bin/cmake -E cmake_link_script CMakeFiles/DisplayImage.dir/link.txt --verbose=1
/usr/bin/c++      CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o  -o DisplayImage -rdynamic /usr/lib64/libopencv_videostab.so.2.4.9 /usr/lib64/libopencv_superres.so.2.4.9 /usr/lib64/libopencv_stitching.so.2.4.9 /usr/lib64/libopencv_contrib.so.2.4.9 /usr/lib64/libopencv_nonfree.so.2.4.9 /usr/lib64/libopencv_ocl.so.2.4.9 /usr/lib64/libopencv_gpu.so.2.4.9 /usr/lib64/libopencv_photo.so.2.4.9 /usr/lib64/libopencv_objdetect.so.2.4.9 /usr/lib64/libopencv_legacy.so.2.4.9 /usr/lib64/libopencv_video.so.2.4.9 /usr/lib64/libopencv_ml.so.2.4.9 /usr/lib64/libopencv_calib3d.so.2.4.9 /usr/lib64/libopencv_features2d.so.2.4.9 /usr/lib64/libopencv_highgui.so.2.4.9 /usr/lib64/libopencv_imgproc.so.2.4.9 /usr/lib64/libopencv_flann.so.2.4.9 /usr/lib64/libopencv_core.so.2.4.9
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `main':
DisplayImage.cpp:(.text+0xa4): undefined reference to `cv::imread(std::string const&, int)'
DisplayImage.cpp:(.text+0x144): undefined reference to `cv::namedWindow(std::string const&, int)'
DisplayImage.cpp:(.text+0x1b5): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [DisplayImage] Ошибка 1
make[2]: Выход из каталога `/home/jetbird/workspace/opencv-test'
make[1]: *** [CMakeFiles/DisplayImage.dir/all] Ошибка 2
make[1]: Выход из каталога `/home/jetbird/workspace/opencv-test'
make: *** [all] Ошибка 2
[jetbird@comp-core-i5-4210u-715a66 opencv-test]$

Вроде как компилятор видит библиотеки, и они там лежат, и даже символы в них есть, а линковать отказывается. При этом примеры из пакета libopencv2.4-examples запускаются.

В чем может быть дело?

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 307
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: OpenCV tutorial
« Ответ #1 : 26.06.2016 16:30:46 »
Не нашёл библиотек или объектных файлов с этими функциями.

Оффлайн spike_spb

  • Давно тут
  • **
  • Сообщений: 41
    • Email
Re: OpenCV tutorial
« Ответ #2 : 26.06.2016 16:36:54 »
Не нашёл библиотек или объектных файлов с этими функциями.
Ну, понятно... я пробую, например, искать вручную функцию namedWindow:

$ readelf -s /usr/lib64/libopencv_highgui.so.2.4.9|grep named
   976: 0000000000027360     8 FUNC    GLOBAL DEFAULT   11 _ZN2cv11namedWindowERKNSt

Она вроде там есть, и в make VERBOSE=1 видно, что эта библиотека указана в списке для компоновки...

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 307
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: OpenCV tutorial
« Ответ #3 : 26.06.2016 16:59:51 »
cmake --check-system-vars    .
ошибки находит?
 

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 307
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: OpenCV tutorial
« Ответ #4 : 26.06.2016 17:01:08 »
make VERBOSE=1
не напомните - чем больше цифра - тем более подробно, или наоборот?

Оффлайн spike_spb

  • Давно тут
  • **
  • Сообщений: 41
    • Email
Re: OpenCV tutorial
« Ответ #5 : 26.06.2016 17:13:28 »
cmake --check-system-vars    .
ошибки находит?

Нет, ошибки не находит, отрабатывает как обычно:
Also check system files when warning about unused and uninitialized variables.
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/jetbird/workspace/opencv-test

А про VERBOSE не знаю, погуглил, вроде как VERBOSE=0 без подробностей, а =1 с ними.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 307
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: OpenCV tutorial
« Ответ #6 : 26.06.2016 18:20:35 »
Тогда поставьте VERBOSE=9

Оффлайн spike_spb

  • Давно тут
  • **
  • Сообщений: 41
    • Email
Re: OpenCV tutorial
« Ответ #7 : 27.06.2016 13:24:29 »
Тогда поставьте VERBOSE=9

[jetbird@comp-core-i5-4210u-715a66 opencv-test]$ make VERBOSE=9
/usr/bin/cmake -H/home/jetbird/workspace/opencv-test -B/home/jetbird/workspace/opencv-test --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/jetbird/workspace/opencv-test/CMakeFiles /home/jetbird/workspace/opencv-test/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Вход в каталог `/home/jetbird/workspace/opencv-test'
make -f CMakeFiles/DisplayImage.dir/build.make CMakeFiles/DisplayImage.dir/depend
make[2]: Вход в каталог `/home/jetbird/workspace/opencv-test'
cd /home/jetbird/workspace/opencv-test && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test /home/jetbird/workspace/opencv-test/CMakeFiles/DisplayImage.dir/DependInfo.cmake --color=
Dependee "/home/jetbird/workspace/opencv-test/CMakeFiles/DisplayImage.dir/DependInfo.cmake" is newer than depender "/home/jetbird/workspace/opencv-test/CMakeFiles/DisplayImage.dir/depend.internal".
Dependee "/home/jetbird/workspace/opencv-test/CMakeFiles/CMakeDirectoryInformation.cmake" is newer than depender "/home/jetbird/workspace/opencv-test/CMakeFiles/DisplayImage.dir/depend.internal".
Scanning dependencies of target DisplayImage
make[2]: Выход из каталога `/home/jetbird/workspace/opencv-test'
make -f CMakeFiles/DisplayImage.dir/build.make CMakeFiles/DisplayImage.dir/build
make[2]: Вход в каталог `/home/jetbird/workspace/opencv-test'
/usr/bin/cmake -E cmake_progress_report /home/jetbird/workspace/opencv-test/CMakeFiles 1
[100%] Building CXX object CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o
/usr/bin/c++    -I/usr/include/opencv    -o CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o -c /home/jetbird/workspace/opencv-test/DisplayImage.cpp
Linking CXX executable DisplayImage
/usr/bin/cmake -E cmake_link_script CMakeFiles/DisplayImage.dir/link.txt --verbose=9
/usr/bin/c++      CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o  -o DisplayImage -rdynamic /usr/lib64/libopencv_videostab.so.2.4.9 /usr/lib64/libopencv_superres.so.2.4.9 /usr/lib64/libopencv_stitching.so.2.4.9 /usr/lib64/libopencv_contrib.so.2.4.9 /usr/lib64/libopencv_nonfree.so.2.4.9 /usr/lib64/libopencv_ocl.so.2.4.9 /usr/lib64/libopencv_gpu.so.2.4.9 /usr/lib64/libopencv_photo.so.2.4.9 /usr/lib64/libopencv_objdetect.so.2.4.9 /usr/lib64/libopencv_legacy.so.2.4.9 /usr/lib64/libopencv_video.so.2.4.9 /usr/lib64/libopencv_ml.so.2.4.9 /usr/lib64/libopencv_calib3d.so.2.4.9 /usr/lib64/libopencv_features2d.so.2.4.9 /usr/lib64/libopencv_highgui.so.2.4.9 /usr/lib64/libopencv_imgproc.so.2.4.9 /usr/lib64/libopencv_flann.so.2.4.9 /usr/lib64/libopencv_core.so.2.4.9
CMakeFiles/DisplayImage.dir/DisplayImage.cpp.o: In function `main':
DisplayImage.cpp:(.text+0xa4): undefined reference to `cv::imread(std::string const&, int)'
DisplayImage.cpp:(.text+0x155): undefined reference to `cv::namedWindow(std::string const&, int)'
DisplayImage.cpp:(.text+0x1c6): undefined reference to `cv::imshow(std::string const&, cv::_InputArray const&)'
collect2: error: ld returned 1 exit status
make[2]: *** [DisplayImage] Ошибка 1
make[2]: Выход из каталога `/home/jetbird/workspace/opencv-test'
make[1]: *** [CMakeFiles/DisplayImage.dir/all] Ошибка 2
make[1]: Выход из каталога `/home/jetbird/workspace/opencv-test'
make: *** [all] Ошибка 2

Оффлайн spike_spb

  • Давно тут
  • **
  • Сообщений: 41
    • Email
Re: OpenCV tutorial
« Ответ #8 : 29.06.2016 18:03:28 »
Мне почему-то кажется, что этот пакет с opencv собран как-то не так. С ним невозможно слинковаться. А если скачать библиотеку opencv с сайта разработчика и собрать ее, то с ней этот же пример линкуется на ура.

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 307
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: OpenCV tutorial
« Ответ #9 : 30.06.2016 06:08:35 »
А мне почему-то кажется, что проблема связана с as-need

Оффлайн ruslandh

  • Поспешай не торопясь !
  • Модератор глобальный
  • *****
  • Сообщений: 32 307
  • Учиться .... Телепатами не рождаются, ими ....
    • Email
Re: OpenCV tutorial
« Ответ #10 : 30.06.2016 07:14:21 »