前言
項目需求,需要先行將 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;
}
接下來的問題是如何編譯…
不消一會,不熟悉編譯參數的我眼角流下來眼淚…
於是我想到了用 Qt
的 qmake
來幫我們生成 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~