lin*_*les 55 c++ ubuntu opencv g++
我在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;
}
Run Code Online (Sandbox Code Playgroud)
我使用此命令行编译它:
g++ DisplayImage.cpp -o DisplayImage `pkg-config opencv --cflags --libs`
Run Code Online (Sandbox Code Playgroud)
没有编译时错误,但是当我尝试运行生成的二进制文件时,/DisplayImage code.png我收到以下错误消息:
./DisplayImage: error while loading shared libraries: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)
Coo*_*kyt 96
您尚未将共享库放在加载程序可以找到它的位置.查看/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/
Run Code Online (Sandbox Code Playgroud)
然后跑
sudo ldconfig -v
Run Code Online (Sandbox Code Playgroud)
如果找不到库,请尝试运行
sudo updatedb && locate libopencv_core.so.2.4
Run Code Online (Sandbox Code Playgroud)
在一个壳里.updatedb如果在编译OpenCV后重新启动,则无需运行.
参考文献:
关于Linux上的共享库:http://www.eyrie.org/~eagle/notes/rpath.html
关于添加OpenCV共享库:http://opencv.willowgarage.com/wiki/InstallGuide_Linux
Uma*_*r R 21
为了使它更清晰(并将其组合在一起),我必须做上面提到的两件事.
1-创建一个文件,/etc/ld.so.conf.d/opencv.conf并在其中写入存储opencv库的文件夹的路径.(Cookyt的回答)
2- .so在LD_LIBRARY_PATH()中包含opencv 文件的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/opencv/lib
Run Code Online (Sandbox Code Playgroud)
小智 16
Umair R的答案主要是解决问题的正确方法,因为此错误曾经是由opencv库和程序之间缺少的链接引起的.所以需要指定ld_libraty_path配置.PS.通常的库路径假设为:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
我试过这个并且效果很好.
cod*_*ife 12
使用以下命令行查找包含共享库libopencv_core.so.2.4的文件夹.
sudo find / -name "libopencv_core.so.2.4*"
Run Code Online (Sandbox Code Playgroud)
然后我得到了结果:
/usr/local/lib/libopencv_core.so.2.4.
Run Code Online (Sandbox Code Playgroud)
创建一个名为的文件,
/etc/ld.so.conf.d/opencv.conf
并将其写入存储二进制文件的文件夹的路径.例如,我写入/usr/local/lib/了我的opencv.conf文件.运行命令行,如下所示.
sudo ldconfig -v
Run Code Online (Sandbox Code Playgroud)
尝试再次运行该命令.
| 归档时间: |
|
| 查看次数: |
117359 次 |
| 最近记录: |