Beaglebone 上的 OpenCV 编译错误

Posted

技术标签:

【中文标题】Beaglebone 上的 OpenCV 编译错误【英文标题】:OpenCV compiling error on Beaglebone 【发布时间】:2014-10-16 08:41:58 【问题描述】:

我使用这里提到的步骤安装了 Ubuntu 14.04 和 Opencv https://solarianprogrammer.com/2014/04/21/opencv-beaglebone-black-ubuntu/ 我正在尝试编译以下代码(保存在名为 test2.cpp 的文本文件中。将 test2.cpp 和 lena.jpg 复制到 beaglebone 主文件夹):

// Test to convert a color image to gray
// Build on Linux with:
// g++ test2.cpp -o test2 -lopencv_core -lopencv_imgproc -lopencv_highgui

#include <opencv2/opencv.hpp>
#include <iostream>

int main() 
    // Load the image file and check for success
    cv::Mat input = cv::imread("lena.jpg", 1);
    if(!input.data) 
        std::cout << "Unable to open the image file" << std::endl;
        return -1;
    

    // Convert the input file to gray
    cv::Mat gray_image;
    cvtColor(input, gray_image, cv::COLOR_BGR2GRAY);

    // Save the result
    cv::imwrite("lena_gray.jpg", gray_image);

    return 0;

使用 g++ test2.cpp -o test2 -lopencv_core -lopencv_imgproc -lopencv_highgui 我还尝试告诉编译器库在哪里使用 -L /usr/local/lib 。 (在那里找到了 libopencv 文件)。但是每次都报错:

ubuntu@arm:~$ g++ test2.cpp -o test2 -lopencv_core -lopencv_imgproc -lopencv_highgui -L usr/local/lib
/tmp/cckXjOPd.o: In function `main':
test2.cpp:(.text+0x26): undefined reference to `cv::imread(cv::String const&, int)'
test2.cpp:(.text+0xf0): undefined reference to `cv::imwrite(cv::String const&, cv::_InputArray const&, std::vector<int, std::allocator<int=""> > const&)'
collect2: error: ld returned 1 exit status

有人可以帮我吗?任何帮助将不胜感激。

【问题讨论】:

错字:您缺少库路径的前导 /。你需要-L /usr/local/lib。写一个Makefile 可能会更容易设置这种东西。 我尝试添加前导 / 但得到了同样的错误。 【参考方案1】:

我发现使用以下代码进行编译总是很方便且安全:

g++ test2.cpp -o test2 `pkg-config --libs --cflags opencv`

如果还没有pkg-config,请安装。

【讨论】:

我尝试了您提供的编译代码。它没有显示任何错误(所以 pkg-config 已经安装了?)但我没有看到任何输出。一个名为 lena_gray.jpg 的文件应该保存在主文件夹中,对吧?但我没有看到任何这样的文件。另外,请注意,我所说的上述代码使用 jpg。但是我在代码中使用了 jpeg,因为我的文件是 jpeg。这会造成问题吗? 谢谢。我应该在编译后运行 ./test2 命令。像魅力一样工作! 如果您想查看编译的详细输出,请将-v 添加到标志中。是的,文件名必须匹配。很高兴它帮助解决了您的问题:)

以上是关于Beaglebone 上的 OpenCV 编译错误的主要内容,如果未能解决你的问题,请参考以下文章

在 BeagleBone Black 上构建 gcc 失败

Beaglebone Black 和 Qt 上的 ALSA 问题:-lasound 未找到

ubuntu 14.04lts 上的奇怪编译错误 c++ opencv 2.4.10

Beaglebone 上的 Jazelle

如何防止Beaglebone外围引脚的劫持

当通过内核模块访问GPIO2和GPIO3时,为什么我会在Beaglebone Black上出现分段错误?