2 gao0arm gao0arm 于 2013.07.11 15:02 提问

懂交叉编译或ld.so.conf或者或者zedboard或者动态库相关的请进来。。

小弟最近没事儿,又研究了一下交叉编译opencv的事情。

  第一步:在电脑上交叉编译opencv,make,make install之后,我把相关的include/和/lib和/share分别拷贝到zedboard板上的/usr/local/include ,/usr/local/lib/ ,/usr/local/share。在板子上运行的是linaro桌面系统.

   第二步:在电脑上我用cmake指定交叉编译工具,库文件和头文件(都是交叉编译出来的,也就是arm平台的头文件和库文件),编译了源代码DisplayImage.cpp(这个代码其实就是《zynq协同 设计指南》这本书里面的那个egedetect.cpp的代码),生成可执行程序DisplayImage。

   第三步:将DisplayImage拷贝到板子上运行:

root@linaro-ubuntu-desktop:/mnt#./DisplayImage lena.jpg lena1.jpg

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

第四步:以上原因相信大家都知道,找不到共享库,于是我在/etc/ld.so.conf文件中添加了一行,如下可以看出:

root@linaro-ubuntu-desktop:/mnt# cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf
/usr/local/lib

而我们需要的库libopencv_calib3d.so.2.4就在/usr/local/lib下面:如下可以看出:

root@linaro-ubuntu-desktop:/mnt# ls /usr/local/lib/ |grep calib3d*
libopencv_calib3d.so
libopencv_calib3d.so.2.4
libopencv_calib3d.so.2.4.6

这些都确认好了之后,执行root@linaro-ubuntu-desktop:/mnt# /sbin/ldconfig

按理说,应该就是一切OK了赛,但是执行程序的时候效果如下:

root@linaro-ubuntu-desktop:/mnt# /sbin/ldconfig
root@linaro-ubuntu-desktop:/mnt# ./DisplayImage lena.jpg lena1.jpg
./DisplayImage: error while loading shared libraries: libopencv_calib3d.so.2.4:
cannot open shared object file: No such file or directory

呵呵呵呵。。。还是不得行。然后我看了一下已经加载的共享库:

root@linaro-ubuntu-desktop:/mnt# ldconfig -p | grep calib3d
libopencv_calib3d.so.2.4 (libc6) => /usr/local/lib/libopencv_calib3d.so.2.4
libopencv_calib3d.so (libc6) => /usr/local/lib/libopencv_calib3d.so

可以看出是已经加载了这个共享库的哦。

但是程序执行的时候怎么都找不到。

这是怎么回事:??????

第五步:我们换种方法试试看,用LD_LIBRARY_PATH试试,具体如下:

root@linaro-ubuntu-desktop:/mnt# export LD_LIBRARY_PATH=/usr/local/lib

然后执行程序看看什么情况,如下:

root@linaro-ubuntu-desktop:/mnt# ./DisplayImage lena.jpg lena1.jpg
root@linaro-ubuntu-desktop:/mnt# ls
?? AutoUnattend.xml backup lena.jpg sources
?? DisplayImage boot new support
??? WIN7Activation_1.7_XiaZaiBa.zip bootmgr setup.exe test
????? autorun.inf efi slope.cpp upgrade

这次程序执行时没得错误了,但是没得结果啊,这个程序时将lena.jpg采用什么边缘算子之后输出之后的图像lena1.jpg。。
查看了,没有生成lena1.jpg..

这又是怎么回事儿》》?????

第六步:问题就来了,问什么用了ld.so.con这种方法,还是找不到库,而是用LD_LIBRARY_PAHT之后就可以?按理说应该都可以的问题就来了,为什么执行程序不出错,但是没有保存图像啊。。

附录:DisplayImage.cpp的代码.

#include "cv.h"
#include "highgui.h"

IplImage* doCanny(
IplImage* in,
double lowThresh,
double highThresh,
double aperture)
{
if (in->nChannels != 1)
return(0); // Canny only handles gray scale images
IplImage* out = cvCreateImage(
cvGetSize( in ),
in->depth, //IPL_DEPTH_8U,
1);
cvCanny( in, out, lowThresh, highThresh, aperture );
return( out );
};

int main( int argc, char** argv )
{
if(argc!= 3)printf("arguments error! format origin_image.bmp target_image.bmp\n");
IplImage* img_rgb = cvLoadImage( argv[1] );
IplImage* img_gry = cvCreateImage( cvSize( img_rgb->width,img_rgb->height ), img_rgb->depth, 1);
cvCvtColor(img_rgb, img_gry ,CV_BGR2GRAY);
// cvNamedWindow("Example Gray", CV_WINDOW_AUTOSIZE );
// cvNamedWindow("Example Canny", CV_WINDOW_AUTOSIZE );
// cvShowImage("Example Gray", img_gry );
IplImage* img_cny = doCanny( img_gry, 10, 100, 3 );
if(cvSaveImage(argv[2],img_cny,0)!=0)
printf("Save Image Successful\n");
// cvShowImage("Example Canny", img_cny );
// cvWaitKey(0);
cvReleaseImage( &img_rgb);
cvReleaseImage( &img_gry);
cvReleaseImage( &img_cny);
// cvDestroyWindow("Example Gray");
// cvDestroyWindow("Example Canny");
return 0;
}

1个回答

oyljerry
oyljerry   Ds   Rxr 2015.01.03 13:21

没生产图像,那是因为代码有问题,调用不对

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!