【问题标题】:Trouble with cross-compiling an c++ openCV application for the beaglebone black为 beaglebone black 交叉编译 c++ openCV 应用程序时遇到问题
【发布时间】:2015-03-12 22:35:13
【问题描述】:

我希望有人能快速解决,因为我有点沮丧。 我正在尝试在我的 Linux Ubuntu 14.04 计算机上为我的 Beaglebone Black (BBB) 交叉编译一个 openCV 应用程序。 我安装了交叉编译器:arm-linux-gnueabihf-gcc-4.8 en arm-linux-gnueabihf-g++-4.8。叉 。当我编译一个简单的 c++ 程序而不链接到第 3 方库(如 openCV)时,这些工作。

因为我想为我的 BBB 进行编译,所以我在我的 linux 计算机上的 /mnt/BBB/ 文件夹中安装(samba)我的 beaglebone。我尝试了以下代码(这是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

谁能告诉我我做错了什么?或者有什么可以做得更好的?

谢谢

【问题讨论】:

    标签: c++ linux opencv cross-compiling beagleboneblack


    【解决方案1】:

    您似乎没有正确链接库!你为什么不使用 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

    【讨论】:

    • 我在命令行上将它与参数链接 - L/mnt/BBB/usr/local/lib 至少这是我希望我正在做的 ;-) 我从未使用过制作。也许是时候让我学习它了。但首先我想测试我的设置
    • 您可能指向错误的库。尝试将完整路径放到单个库中
    • 我试过 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:找不到-l/mnt/BBB/usr /local/lib/opencv_highgui
    • 结果是:/usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux-gnueabihf/bin/ld:找不到 -l/mnt/BBB/usr/local/lib/libopencv_core.so /usr/lib/gcc-cross/arm-linux-gnueabihf/4.8/../../../../arm-linux -gnueabihf/bin/ld: 找不到 -l/mnt/BBB/usr/local/lib/libopencv_highgui.so collect2: 错误: ld 返回 1 退出状态用 ll /mnt/BBB/usr/local/lib 仔细检查文件夹| grep opencv_core 显示文件存在
    • mmm...尝试以这种方式设置 LD_LIBRARY_PATH:export LD_LIBRARY_PATH=/mnt/BBB/usr/local/lib 并尝试使用原始命令重新编译
    猜你喜欢
    • 2014-12-15
    • 2011-04-07
    • 2020-12-15
    • 1970-01-01
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多