Opencv标题不同版本和库不同版本:ubuntu

时间:2015-12-06 15:25:22

标签: opencv ubuntu caffe

我是Ubuntu和OpenCV的新手。为我的业余道歉。

我认为我搞砸了OpenCV安装。

我已经在2.4个月前安装了OpenCV。安装成功(使用CMake从源代码构建openCV)

几天后我也使用相同的程序安装了OpenCV 3.0。 当我的一个代码因为看似没有理由而给出了分段错误时,问题就出现了。根据朋友对Caffe神经网络问题论坛(https://github.com/BVLC/caffe/issues/3416)的建议,似乎我正在编译3.0标题但链接到2.4库。

我检查了/ usr / local / include。它有标准的openCv头文件(我不明白用3.0标题编译的方式')

在/ usr / local / lib中我有OpenCV 3.0库(根本没有2.4.8)。

现在编译成功,但是当我尝试运行它时,我收到以下错误。

 Program received signal SIGSEGV, Segmentation fault.
 0x00007ffff76c49bc in cv::merge(cv::_InputArray const&,       
 cv::_OutputArray     const&) ()
 from /usr/lib/x86_64-linux-gnu/libopencv_core.so.2.4

只是添加

" pkg-config --modversion opencv" 3.0.0

而dpkg -l | grep libopencv 放弃了

i libopencv-calib3d-dev:amd64 2.4.8 + dfsg1-2ubuntu1 amd64 libopencv-calib3d的开发文件 ii libopencv-calib3d2.4:amd64 2.4.8 + dfsg1-2ubuntu1 amd64计算机视觉相机校准库 ii libopencv-contrib-dev:amd64用于libopencv-contrib的2.4.8 + dfsg1-2ubuntu1 amd64开发文件 .......

Q.1>为什么我的代码链接到libopencv_core.so.2.4而不是3.0。我已经检入/ usr / local / lib并没有看到一个2.4库。我尝试在CMake中手动定义头文件和库的链接,但结果仍然相同。

Q.2> OpenCV标头有版本号吗?我不明白他们是如何被称为' 2.4标题'。我检查了源代码,但没有看到对某个版本库的任何特定要求。然后是什么要求链接到2.4版本库?

对不起,如果这是理论上的,但这对像我这样的初学者非常有益。如果当前的标题不合适,请对合适的问题标题发表评论。

由于

1 个答案:

答案 0 :(得分:0)

您的opencv2.4库位于/usr/lib/x86_64-linux-gnu/,而新的opencv3库很可能位于/ usr / local / lib中。链接器首先查看/usr/lib/x86_64-linux-gnu/目录,然后首先找到opencv2.4库。要解决此问题,您可以通过将以下内容添加到/usr/local/lib文件

来告诉链接器首先查看~/.bashrc
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

按如下方式重新加载终端中的bashrc文件(或者只是关闭并重新打开终端):

source ~/.bashrc

更新库数据库:

sudo ldconfig

要检查链接器搜索库的顺序,可以使用以下命令:

ld -lopencv_core --verbose | grep attempt