Проблема с кросс-компиляцией c ++ openCV-приложения для beaglebone black

0

Я надеюсь, что у кого-то есть быстрое решение, потому что я получаю крошечный, немного разочарованный. Я пытаюсь перекрестно скомпилировать приложение openCV для моего Beaglebone Black (BBB) на моем компьютере Linux Ubuntu 14.04. Я установил кросс-компиляторы: arm-linux-gnueabihf-gcc-4.8 ru arm-linux-gnueabihf-g++ - 4.8. пересекать. Они работают, когда я скомпилирую простую программу c++ без ссылки на 3-ю партийные библиотеки, такие как openCV.

Поскольку я хочу скомпилировать для своего BBB, я смонтировал (samba) мой beaglebone в папке /mnt/BBB/на моем Linux-компьютере. И я попробовал следующий код (который является копией http://docs.opencv.org/doc/tutorials/introduction/linux_gcc_cmake/linux_gcc_cmake.html)

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char** argv )
{
    if ( argc != 2 )
    {
        printf("usage: DisplayImage.out <Image_Path>\n");
        return -1;
    }

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

    if ( !image.data )
    {
        printf("No image data \n");
        return -1;
    }
    namedWindow("Display Image", 1 );
    imshow("Display Image", image);

    waitKey(0);

    return 0;
}

С помощью следующей команды:

arm-g++ -I/mnt/BBB/usr/local/include -I/mnt/BBB/usr/local/include/opencv -L/mnt/BBB/usr/local/lib  -lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching     -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab main.cpp -o main

Но я получаю следующую ошибку:

/tmp/ccX4FOL8.o: In function 'main':
main.cpp:(.text+0x4c): undefined reference to 'cv::imread(cv::String const&, int)'
main.cpp:(.text+0xa6): undefined reference to 'cv::namedWindow(cv::String const&, int)'
main.cpp:(.text+0xe2): undefined reference to 'cv::imshow(cv::String const&, cv::_InputArray const&)'
main.cpp:(.text+0xfc): undefined reference to 'cv::waitKey(int)'
/tmp/ccX4FOL8.o: In function 'cv::String::String(char const*)':
main.cpp:(.text._ZN2cv6StringC2EPKc[_ZN2cv6StringC5EPKc]+0x2a): undefined reference to 'cv::String::allocate(unsigned int)'
/tmp/ccX4FOL8.o: In function 'cv::String::~String()':
main.cpp:(.text._ZN2cv6StringD2Ev[_ZN2cv6StringD5Ev]+0xa): undefined reference to 'cv::String::deallocate()'
/tmp/ccX4FOL8.o: In function 'cv::_InputArray::_InputArray(cv::Mat const&)':
main.cpp:(.text._ZN2cv11_InputArrayC2ERKNS_3MatE[_ZN2cv11_InputArrayC5ERKNS_3MatE]+0x34): undefined reference to 'vtable for cv::_InputArray'
/tmp/ccX4FOL8.o: In function 'cv::_InputArray::~_InputArray()':
main.cpp:(.text._ZN2cv11_InputArrayD2Ev[_ZN2cv11_InputArrayD5Ev]+0x24): undefined reference to 'vtable for cv::_InputArray'
/tmp/ccX4FOL8.o: In function 'cv::Mat::~Mat()':
main.cpp:(.text._ZN2cv3MatD2Ev[_ZN2cv3MatD5Ev]+0x20): undefined reference to 'cv::fastFree(void*)'
/tmp/ccX4FOL8.o: In function 'cv::Mat::operator=(cv::Mat const&)':
main.cpp:(.text._ZN2cv3MataSERKS0_[_ZN2cv3MataSERKS0_]+0xb4): undefined reference to 'cv::Mat::copySize(cv::Mat const&)'
/tmp/ccX4FOL8.o: In function 'cv::Mat::release()':
main.cpp:(.text._ZN2cv3Mat7releaseEv[_ZN2cv3Mat7releaseEv]+0x3e): undefined reference to 'cv::Mat::deallocate()'
collect2: error: ld returned 1 exit status

Может кто-нибудь сказать мне, что я делаю неправильно? Или что можно сделать лучше?

спасибо

Теги:
opencv
cross-compiling
beagleboneblack

1 ответ

0
Лучший ответ

Похоже, что вы неправильно связываете библиотеку! Почему вы не используете CMake?

 target_link_libraries(your_project ${OpenCV_LIBS})

Здесь вы найдете полную ссылку на кросс-компиляцию: http://www.vtk.org/Wiki/CMake_Cross_Compiling

В любом случае, я нашел это в группе форумов OpenCV:

Кросс-компилировать OpenCV, но не удалось найти стороннюю библиотеку

  • 0
    Я связываю это в командной строке с аргументом - L / mnt / BBB / usr / local / lib, по крайней мере, это то, что я надеюсь делать ;-) Я никогда не использовал cmake. Может быть, пришло время для меня, чтобы узнать это. Но сначала я хочу проверить мои настройки
  • 0
    Вы указываете, вероятно, на неправильных библиотек. попробуйте вместо этого поставить полный путь к отдельным библиотекам
Показать ещё 6 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню