前言
项目需求,需要先行将 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~