2015-01-14 3 views
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.Проблема с кросс-компиляцией приложения C++ openCV для beaglebone black

Поскольку я хочу скомпилировать для своего 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 

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

Спасибо

ответ

0

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

target_link_libraries(your_project ${OpenCV_LIBS}) 

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

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

Cross compile OpenCV but failed to find 3rd party library

+0

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

+0

Вы указываете, вероятно, на неправильные библиотеки. попробуйте поместить полный путь к одиночным libs вместо – madduci

+0

Я попробовал arm-g ++ -I/mnt/BBB/usr/local/include -I/mnt/BBB/usr/local/include/opencv -L/mnt/BBB/usr/local/lib -l/mnt/BBB/usr/local/lib/ope ncv_core -l/mnt/BBB/usr/local/lib/opencv_highgui main.cpp -o main Но безрезультатно: ошибка теперь: /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: не удается найти -l/mnt/BBB/usr/local/lib/opencv_core /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld: не может find -l/mnt/BBB/usr/local/lib/opencv_highgui –