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~

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