zedboard---------linaro下面不能执行交叉编译的opencv程序的原因及解释

        在上篇文章中,我主要说出了问题,主要就是为什么交叉编译的opencv的代码不能再linaro的桌面上面执行,但是却能够在busybox制作的文件系统下面执行?这这边文章中我将简单的分析,并且写出解决的方法。

       首先我在PC机上的ubuntu系统下面用交叉编译工具编译了源码,生成DisplayImg可执行程序拷贝到U盘,挂载在目标机上。我们首先看一下这个可执行程序的解释器:

 

root@linaro-ubuntu-desktop:/mnt# readelf -a DisplayImg  |grep ld-linux
      [Requesting program interpreter: /lib/ld-linux.so.3]


          从上面的结果中可以看出,这个可执行程序用的是/lib/ld-linux.so.3这个解释器(暂时这么称呼吧,我不是很清楚).

但是在linaro桌面系统的/lib/下面没有这个文件的,但是有这个ld-linux-armhf.so.3和文件夹arm-linux-gnueabihf。在上篇博客中,我采用的是建立一个链接文件ld-linux.so.3->ld-linux-armhf.so.3。这样虽然程序时可以执行,但是执行没有任何结果,也不报错误。这就是问题所在的地方了。

      我们在看一下用linaro本地编译源码得到可执行程序DisplayImage的相关信息:

root@linaro-ubuntu-desktop:/mnt/opencv_test# readelf -a DisplayImage |grep ld-li
nux
      [Requesting program interpreter: /lib/ld-linux-armhf.so.3]


       看到本地编译得到的程序需要的解释器是ld-linux-armhf.so.3,说明本地编译和交叉编译得到情况不一样的 。问题就想必应该猜到了。当我们利用busybox制作文件系统的时候,是把相关的工具链的/bin,/lib/等等都拷贝到ramdisk8M.gz中的。所以交叉编译过去的执行当然是一致的,所以能够正确的执行。但是linaro桌面的系统的制作,我们没有拷贝交叉工具链的相关文件,linaro自带就有gcc编译工具什么的。

       所以问题的解决方法就是:

      《1》 想用交叉编译得到的elf在linaro下面运行,那就需要将交叉编译工具相关的东西拷贝过去,opencv 也是交叉编译。

      《2》 opencv在linaro下面本例编译源码安装,本地编译源程序,得到elf就可以在linaro下面执行。

      《3》 交叉编译opencv,交叉编译程序,得到的elf在busybox下面能够正确执行。

    

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值