当前位置: 首页>>技术问答>>正文


openCV程序编译错误“libopencv_core.so.2.4:无法打开共享对象文件:没有这样的文件或目录”在ubuntu 12.04中

, , ,

问题描述

我在ubuntu 12.04中编译并安装了openCV 2.4.2。在/usr/local/include下,我可以看到目录/usr/local/opencv/usr/local/opencv2

这是我写的代码:

#include <cv.h>
#include <highgui.h>
#include <iostream>
using namespace cv;
using namespace std;
int main(int argc,char **argv)
{
   Mat image;
   image = imread(argv[1],1);

   if(argc != 2 || !image.data)
   {
       cout << "No image data\n";
       return -1;
   }

   namedWindow("Display Image",CV_WINDOW_AUTOSIZE);
   imshow("Display Image",image);
   waitKey(0);
   return 0;
}

我使用此命令行编译它:

g++ DisplayImage.cpp -o DisplayImage `pkg-config opencv --cflags --libs` 

没有编译时错误,但是当我尝试使用/DisplayImage code.png运行生成的二进制文件时,我收到以下错误消息:

./DisplayImage: error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory

最佳解决方法

您尚未将共享库放在加载程序可以找到它的位置。查看/usr/local/opencv/usr/local/opencv2文件夹,看看它们中是否包含任何共享库(文件以lib开头,通常以.so结尾)。当你找到它们时,创建一个名为/etc/ld.so.conf.d/opencv.conf的文件,并向其写入存储库的文件夹的路径,每行一个。

例如,如果库存储在/usr/local/opencv/libopencv_core.so.2.4下,那么我会将其写入我的opencv.conf文件:

/usr/local/opencv/

然后跑

sudo ldconfig -v

如果找不到库,请尝试运行

sudo updatedb && locate libopencv_core.so.2.4

在一个壳里。如果在编译OpenCV后重新启动,则无需运行updatedb

参考文献:

关于Linux上的共享库:http://www.eyrie.org/~eagle/notes/rpath.html

关于添加OpenCV共享库:http://opencv.willowgarage.com/wiki/InstallGuide_Linux

次佳解决方法

为了使它更清晰(并将其组合在一起),我必须做上面提到的两件事。

1-创建一个文件/etc/ld.so.conf.d/opencv.conf并写入存储opencv库的文件夹的路径。(Cookyt的回答)

2-在LD_LIBRARY_PATH()中包含opencv的.so文件的路径

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib

第三种解决方法

Umair R的答案主要是解决问题的正确方法,因为此错误曾经是由opencv库和程序之间缺少的链接引起的。所以需要指定ld_libraty_path配置。 PS。通常的库路径假设为:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib

我试过这个并且效果很好。

第四种方法

使用以下命令行查找包含共享库libopencv_core.so.2.4的文件夹。

sudo find / -name "libopencv_core.so.2.4*"

然后我得到了结果:

 /usr/local/lib/libopencv_core.so.2.4.

创建一个名为/etc/ld.so.conf.d/opencv.conf的文件,并向其写入存储二进制文件的文件夹的路径。例如,我将/usr/local/lib/写入我的opencv.conf文件。运行命令行,如下所示。

sudo ldconfig -v

尝试再次运行该命令。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/7029.html,未经允许,请勿转载。