解决ubuntu中多个opencv版本冲突问题
2016-12-05 13:08
1831 查看
以下内容纯属自己摸索,yy。如有错误,请大家批评指正。
在ubuntu中,我们经常会遇到链接库的版本冲突问题。编写的程序在编译时,也往往因为这些问题报错,或虽编译成功,但运行出错。
针对这类问题,我以opencv为例,谈谈自己的解决思路,希望能给大家一点意见。
首先,为什么选opencv?因为做图像处理,深度学习的研究,opencv必不可少,系统自带的opencv,如opencv-dev, python-opencv-dev等往往会缺胳膊少腿。这时候需要我们自己编译opencv库,带gpu或不带gpu,支持ffmepg或不支持ffmpeg等。
有人会说,不装系统自带的不就行啦。
不过由于常用的深度学习库如,caffe,tensorflow往往依赖库中有opencv-dev,python-opencv-dev等,不装吧,这些库极有可能运行不了。
所以解决opencv版本冲突问题,对我们在ubuntu上编写程序,使用深度库都是很有帮助的。
好了,废话不多说。下面进入正题。
以一个qt小程序为例:
错误:
这个小程序利用了gpu版的opencv。而一般系统自带的opencv是没有编译gpu模块的。
如果我们不解决版本问题,编译同样能成功,不过运行时则会报错。
解决:
(1)我们寻找问题的原因。
从上面我们也看到程序找到的opencv库是2.4.8版的(我自己编译的库是2.4.13版的)
明显链接版本发生冲突啦。
(2)我们进一步查找问题的来源。
由于,我们的程序编译成功,会生成可执行文件。根据这个可执行文件,我们可以找到其相应的依赖库
得到
进入/usr/lib/x86_64-linux-gnu/,我们发现这里opencv的版本为2.4.8,也就证实了程序确实是链接到了低版本的opencv。
(3)修改ld.so.conf.d(优先级较高)
添加一行
执行动态链接库更新
再次编译qt程序,
程序找到正确opencv路径:
终端运行得到结果
如果仍有错误,可考虑将相应*.so文件放入debug或release目录下。
仍然存在的问题
程序能在终端运行。但是qt运行还是有问题。有知道答案的博友,请告知。
在ubuntu中,我们经常会遇到链接库的版本冲突问题。编写的程序在编译时,也往往因为这些问题报错,或虽编译成功,但运行出错。
针对这类问题,我以opencv为例,谈谈自己的解决思路,希望能给大家一点意见。
首先,为什么选opencv?因为做图像处理,深度学习的研究,opencv必不可少,系统自带的opencv,如opencv-dev, python-opencv-dev等往往会缺胳膊少腿。这时候需要我们自己编译opencv库,带gpu或不带gpu,支持ffmepg或不支持ffmpeg等。
有人会说,不装系统自带的不就行啦。
不过由于常用的深度学习库如,caffe,tensorflow往往依赖库中有opencv-dev,python-opencv-dev等,不装吧,这些库极有可能运行不了。
所以解决opencv版本冲突问题,对我们在ubuntu上编写程序,使用深度库都是很有帮助的。
好了,废话不多说。下面进入正题。
以一个qt小程序为例:
#include <QCoreApplication> #include "opencv2/opencv.hpp" #include "opencv2/gpu/gpu.hpp" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); cv::Mat src_image = cv::imread("/home/cvrsg/JpHu/ProgramLibrary/untitled/lena.jpg"); cv::Mat dst_image; cv::gpu::GpuMat d_src_img(src_image); cv::gpu::GpuMat d_dst_img; cv::gpu::cvtColor(d_src_img,d_dst_img,CV_BGR2GRAY); d_dst_img.download(dst_image); cv::namedWindow("test",0); cv::imshow("test",dst_image); cv::waitKey(0); return a.exec(); }
错误:
这个小程序利用了gpu版的opencv。而一般系统自带的opencv是没有编译gpu模块的。
如果我们不解决版本问题,编译同样能成功,不过运行时则会报错。
解决:
(1)我们寻找问题的原因。
从上面我们也看到程序找到的opencv库是2.4.8版的(我自己编译的库是2.4.13版的)
明显链接版本发生冲突啦。
(2)我们进一步查找问题的来源。
由于,我们的程序编译成功,会生成可执行文件。根据这个可执行文件,我们可以找到其相应的依赖库
$cd {HOME}/build-untitled-Desktop-Debug #{HOME}表示用户根目录 $ldd untitled | grep opencv #查找与opencv相关的链接
得到
进入/usr/lib/x86_64-linux-gnu/,我们发现这里opencv的版本为2.4.8,也就证实了程序确实是链接到了低版本的opencv。
(3)修改ld.so.conf.d(优先级较高)
$sudo vim /etc/ld.so.conf.d/libopencv.conf
添加一行
/usr/local/lib
执行动态链接库更新
$sudo ldconfig
再次编译qt程序,
$ldd untitled | grep opencv #查找与opencv相关的链接
程序找到正确opencv路径:
终端运行得到结果
如果仍有错误,可考虑将相应*.so文件放入debug或release目录下。
仍然存在的问题
程序能在终端运行。但是qt运行还是有问题。有知道答案的博友,请告知。
相关文章推荐
- ubuntu16.04 下安装加入opencv_contribute包的GPU版本的OpenCV3.2(CUDA支持)步骤与问题解决
- Ubuntu下安装opencv3.2.0,解决anaconda下的Python和安装opencv3.2.0冲突的问题
- 【ubuntu】解决窗口管理器 不支持透明问题(11.04之前版本不支持)
- 在ubuntu下搭建arm版本的opencv遇到的常见错误及解决方法
- 使用python搭建Django应用程序步骤及版本冲突问题解决
- ubuntu下解决Ctrl-Alt-down in Gnome 3.8 和Eclipse快捷键冲突问题
- 64位Ubuntu 12.04下编译android gcc版本过高问题解决
- 【ubuntu】解决窗口管理器 不支持透明问题(11.04之前版本不支持)
- apt-get依赖库版本过高问题的解决(如何处理libqt4-dev在ubuntu的安装问题)
- 使用python搭建Django应用程序步骤及版本冲突问题解决
- Ubuntu qt 使用opencv库出现undefined reference问题解决
- svn中合并(merge)问题和如何解决版本冲突
- 安装Ubuntu版本linux过程中没有提示设置root用户密码问题的解决办法
- 该如何解决Tomcat支持的J2EE版本的冲突问题
- ubuntu 下用 opencv驱动笔记本摄像头问题解决方法
- 64位Ubuntu 11.10下编译android gcc版本过高问题解决
- Ubuntu 安装软件的过程中,出现版本冲突的解决办法
- unity3d SVN 版本冲突问题的解决
- 页面多个Jquery版本共存的冲突问题,解决方法!