背景:
我希望同时使用Caffe和Digits,这样我就可以在Digits框架内或外部使用Caffe.
然而,对于一个特定的项目,我要求Caffe使用OpenCV 3,而不是Digits默认安装的OpenCV 2.4。该项目使用Digits外部的Caffe,不使用Digits框架。
似乎通过安装Digits,我的OpenCV 3安装被OpenCV 2.4"砸了",这在我最初的Caffe安装中造成了问题。
为了使事情更清楚,下面列出了我所采取的步骤。
从全新的Ubuntu 14.04安装:
- 根据Ubuntu安装Caffe依赖项(OpenCV除外)安装导向器
- 已从源安装OpenCV 3到
/usr/local
- 已测试OpenCV安装
- Demos运行良好,包括OpenCV3-特定代码
- 编译Caffe,将
Makefile.config
设置为使用OpenCV 3 - 经过测试的Caffe安装
- 所有测试都通过了,演示效果良好
- 根据安装指南安装的数字
- Caffe和OpenCV 2.4默认由安装程序脚本安装
- OpenCV 3被OpenCV 2.4击败(?)
- 执行《数字入门》指南中的步骤
- 所有步骤都成功
- 怀疑OpenCV冲突,所以尝试编译Caffe演示
- 发生与OpenCV 3.0和2.4冲突有关的错误,详细信息如下
编译命令:
g++分类。cpp-o分类-I/home/josh/software/caffe/include/-L/home/josh/sioftware/caffe/build/lib/-lcaffe-I/usr/local/cuda/include-L/usr/local/cudia/lib64-lcuda-lcuda-alcuda-lcubass-L/home/josh/software/cudn/include/-L/home/josh/software/cundn/lib64/-lcudnn-L/usr/lib/x86_64-linux-gnu/-lglog-L/usr/local/lib-lbostrongystem-lopencv_core-lopenc_highgui-lopencv_imgproc-lopencv_imgcodecs-DUSE_OPNCV
错误消息:
//usr/bin/ld:warning:/home/josh/software/caffe/build/lib//libkafe.so所需的libopencv_core.so.3.0可能与libopencv.core.so.2.4冲突/usr/bin/ld:/tmp/ccHaWcOl.o:对符号'_ZN2cv6String10deallocateEv'的未定义引用//usr/local/lib/libopencv_core.so.3.0:添加符号时出错:命令行中缺少DSOcollect2:错误:ld返回1退出状态
问题:
- 如何在不破坏Caffe/Digits安装的情况下最好地解决OpenCV版本冲突
- 我需要删除OpenCV并重新安装Caffe和Digits吗?
- 如果是这样的话,我需要做什么不同的事情来防止OpenCV版本冲突,同时仍然允许Caffe(与OpenCV 3)和Digits并行工作
安装OpenCV库时,共享库的存储方式类似于libopencv_core.so.2.4.8,其中2.4.8是OpenCV的版本号。libopencv_core.so文件通常链接到系统中安装的OpenCV的最后一个版本。
因此,尽管libopencv_core.so最初链接到libopencv.core.so.3.0,但当您安装旧版本时,链接会更新为链接到旧版本。
解决方法是专门调用caffe中最新的OpenCV库。为此,您必须修改caffe中的Makefile。将所有出现的opencv_*
替换为:libopencv_*.so.3.0
如果安装Caffe,那么使用opencv3.0并不是一个理想的选择。Caffe与它不太兼容。如果你坚持使用它,请使用命令sudo apt-get autoremove libopencv-dev
删除2.4版本。这个版本冲突的原因是,您安装了libopencv-dev(默认版本是2.4),并使用3.0安装了opencv。所以删除它,然后编译caffe。