Ubuntu - Opencv移植

前言

项目需求,需要先行将 OpenCV 移植到 Ubuntu 中,所以本文不涉及 如何编译Opencv

编译 OpenCV 可以看我上一篇文章:
交叉编译OpenCV

系统:Ubuntu18.06 (x86_64)
资源:so 动态库 + 若干 .h头文件

测试

拿到资源的时候我想先使用一个简单的 demo,然后编译它。看看是否能正常运行。

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

using namespace std;
using namespace cv;
int main()
{
	Mat srcImage = imread("test.jpg");
	imshow("image",srcImage);
	waitKey(0);
	return 0;
}

接下来的问题是如何编译…
不消一会,不熟悉编译参数的我眼角流下来眼泪…

在这里插入图片描述
于是我想到了用 Qtqmake 来帮我们生成 makefile 编译

Qt+OPencv

新建Qt工程
pro 中加入:

INCLUDEPATH += /home/hsy/SW/kit/opencv/include \
                /home/hsy/SW/kit/opencv/include/opencv \
                /home/hsy/SW/kit/opencv/include/opencv2 \
                /home/hsy/SW/kit/tbb/include

LIBS += /home/hsy/SW/kit/opencv/lib/libopencv* \
        /home/hsy/SW/kit/tbb/lib/libtbb.so.2 \
        /home/hsy/SW/kit/tbb/lib/libtbbmalloc.so.2 \
        /home/hsy/SW/kit/tbb/lib/libtbbmalloc_proxy.so.2 \

主函数如下:

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

int main(int argc, char *argv[])
{
    using namespace cv;

    QCoreApplication a(argc, argv);

    Mat srcImage = imread("test.jpg");
    imshow("image",srcImage);

    waitKey(0);

    return a.exec();
}

黎明

编译通过~并生成了可执行文件

但是在执行时却提示,找不到 xxxxx.so ,且相应的路径下 xxxxx.so 存在。

解决方法
由于我们的 OpenCV 并未安装,Ubuntu 查找共享库的路径默认为:

  • /lib
  • /usr/lib

所以找不到很正常。那么怎么解决呢?
有以下几种方法:

  • 编译程序使用静态链接,加上完整路径

在这里插入图片描述

  • 修改 LD_LIBRARY_PATH 环境变量(临时有效,且有时候没有效果)

  • .so 文件复制到可以搜索的路径中,即 /lib/usr/lib

  • 添加搜索路径

三长一短选最短,那就来看看最后一个。

进入搜索路径文件目录

cd /etc/ld.so.conf.d/

创建自己的第三方库的搜索路径设置文件,如 opencv.conf

sudo vim opencv.conf

在该文件中写入Opencv 库所在的路径

执行如下命令,使得设置生效

sudo ldconfig

再次编译执行,OK~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章