58

我在 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
4

5 回答 5

107

您还没有将共享库放在加载程序可以找到它的位置。查看/usr/local/opencvand/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

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

参考:

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

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

于 2012-09-09T01:55:26.063 回答
22

为了更清楚(并将其放在一起),我必须做上面提到的两件事。

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

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

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
于 2013-05-08T09:09:41.607 回答
20

使用以下命令行查找包含共享库 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

尝试再次运行该命令。

于 2017-07-20T23:24:15.447 回答
18

Umair R 的回答主要是解决问题的正确举措,因为这个错误曾经是由 opencv 库和程序之间缺少链接引起的。所以需要指定 ld_libraty_path 配置。附言。通常的库路径应该是:

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

我已经尝试过了,效果很好。

于 2013-06-28T06:10:50.733 回答
0

添加此链接:

/usr/local/lib/*.so.*

总数为:

g++ -o main.out main.cpp -I /usr/local/include -I /usr/local/include/opencv -I /usr/local/include/opencv2 -L /usr/local/lib /usr/local/lib/*.so /usr/local/lib/*.so.*
于 2018-05-23T10:07:06.733 回答