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
您没有将共享库放在加载程序可以find它的位置。 查看/usr/local/opencv
和/usr/local/opencv2
文件夹,看它们是否包含任何共享库(以lib
开头,通常以.so
结尾的文件)。 当find它们时,创build一个名为/etc/ld.so.conf.d/opencv.conf
的文件,并向其中写入存储库的文件夹的path,每行一个。
例如,如果这些库存储在/usr/local/opencv/libopencv_core.so.2.4
下,那么我会把它写到我的opencv.conf
文件中:
/usr/local/opencv/
然后运行
sudo ldconfig -v
如果找不到这些库,请尝试运行
sudo updatedb && locate libopencv_core.so.2.4
在一个shell。 如果从编译OpenCV开始重新启动,则不需要运行updatedb
。
参考文献:
关于Linux上的共享库: http : //www.eyrie.org/~eagle/notes/rpath.html
关于添加OpenCV共享库: http : //opencv.willowgarage.com/wiki/InstallGuide_Linux
为了使它更清楚(并把它放在一起),我必须做两件事上面提到。
1-创build一个文件/etc/ld.so.conf.d/opencv.conf
并写入你的opencv库所在的文件夹path(通过Cookyt)
2-在LD_LIBRARY_PATH()中包含opencv的.so
文件的path
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
Umair R的答案大多是解决问题的正确方法,因为这个错误以前是由opencv库和程序之间缺失的链接引起的。 所以需要指定ld_libraty_pathconfiguration。 PS。 通常的库path假设是:
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.
创build一个名为/etc/ld.so.conf.d/opencv.conf
的文件,并向其中写入二进制文件所在文件夹的path。例如,我写了/usr/local/lib/
到我的opencv.conf
文件。 按如下所示运行命令行。
sudo ldconfig -v
尝试再次运行该命令。