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

问题描述

懂交叉编译或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.bmpn");
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 Successfuln");
// cvShowImage("Example Canny", img_cny );
// cvWaitKey(0);
cvReleaseImage( &img_rgb);
cvReleaseImage( &img_gry);
cvReleaseImage( &img_cny);
// cvDestroyWindow("Example Gray");
// cvDestroyWindow("Example Canny");
return 0;
}

解决方案

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

时间: 2024-08-17 20:15:49

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

/etc/ld.so.conf详解

/etc/ld.so.conf 此文件记录了编译时使用的动态库的路径,也就是加载so库的路径.    默认情况下,编译器只会使用/lib和/usr/lib这两个目录下的库文件,而通常通过源码包进行安装时,如果不指定--prefix会将库安装在/usr/local目录下,而又没有在文件/etc/ld.so.conf中添加/usr/local/lib这个目录>.这样虽然安装了源码包,但是使用时仍然找不到相关的.so库,就会报错.也就是说系统不知道安装了源码包.    对于此种情况有2种解决办法:(1

apache+tomcat 如何配置vhosts.conf文件实现静、动态各属其主,隐藏端口号

问题描述 apache+tomcat 如何配置vhosts.conf文件实现静.动态各属其主,隐藏端口号 apache+tomcat 如何配置vhosts.conf文件实现静.动态各属其主,但要隐藏端口号, 详细说明: 现在已经将apache+tomcat整合了,用的是mod_jk.do负载均衡方式,现在我想将静 态的页面交给apache,动态的jsp交给tomcat.主要是vhosts.conf的配置,或者说我 这个方法有没有问题,最好发个教程谢谢!! 解决方案 动静区分,nginx才是王道,

深入探讨Linux静态库与动态库的详解(一看就懂)_C 语言

库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行.库分静态库和动态库两种. 一.静态库和动态库的区别1. 静态函数库这类库的名字一般是libxxx.a:利用静态函数库编译成的文件比较大--空间,因为整个函数库的所有数据都会被整合进目标代码中,他的优点就显而易见了,即编译后的执行程序不需要外部的函数库支持,因为所有使用的函数都已经被编译进去了.当然这也会成为他的缺点,因为如果静态函数库改变了,那么你的程序必须重新编译.2. 动态函数库这类库的名字一般是libxxx.so;相对于静态

懂java causal analysis tool的朋友请进来一下,谢谢!

问题描述 有哪位朋友懂得javacausalanalysistool的吗?能否给一些学习的资料或教学,有的话麻烦发给我royys@qq.com谢谢了 解决方案 解决方案二:自己顶一下!解决方案三:没人有吗?自己再顶一下!

Linux系统中“动态库”和“静态库”那点事儿【转】

转自:http://blog.chinaunix.net/uid-23069658-id-3142046.html 今天我们主要来说说Linux系统下基于动态库(.so)和静态(.a)的程序那些猫腻.在这之前,我们需要了解一下源代码到可执行程序之间到底发生了什么神奇而美妙的事情.       在Linux操作系统中,普遍使用ELF格式作为可执行程序或者程序生成过程中的中间格式.ELF(Executable and Linking Format,可执行连接格式)是UNIX系统实验室(USL)作为应

php+mysql+nginx在linux上的环境部署

一直在linux上鼓捣,还没有完整在linux下配置过nginx服务器环境部署呢,这几天没什么事就部署了一下,遇到的问题也很多,现在把我的环境部署文档发出了,有什么问题大家可以一起讨论一下,希望大家采用后遇到问题多多沟通. 安装所需各种依赖包 sudo -s LANG=C yum -y install gcc gcc-c++ autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 lib

安装php 找不到lib.so包原因分析

一般我们在Linux下执行某些外部程序的时候可能会提示找不到共享库的错误, 比如: tmux: error while loading shared libraries: libevent-1.4.so.2: cannot open shared object file: No such file or directory 原因一般有两个, 一个是操作系统里确实没有包含该共享库(lib*.so.*文件)或者共享库版本不对, 遇到这种情况那就去网上下载并安装上即可.  另外一个原因就是已经安装了该

Linux strace命令

简介 strace常用来跟踪进程执行时的系统调用和所接收的信号. 在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通 过系统调用访问硬件设备.strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间. 输出参数含义 root@ubuntu:/usr# strace cat /dev/null execve("/bin/cat", ["cat", &qu

Ubuntu 13.04/CentOS 6.4 下C++开发时的相关设置

Ubuntu 13.04/CentOS 6.4 下C++开发时的相关设置 一.基本设置 首先,为了可以使我们的c++ 可以找到 iostream类,std标准库,我们需要在C/C++ General->Paths and Symbols 中添加include dictionarys. 当然,从c/c++ Build ->settings->gcc c++ complier中也可以添加.这样,我们便可以解决include包含问题. 其次,On a project with two targ