opencv2.4.9在s5pv210开发板上移植(待更新)

本文档详细记录了在s5pv210开发板上移植OpenCV2.4.9的过程,包括路径配置、编译安装、解决链接错误及库缺失问题。通过cmake配置交叉编译环境,解决了如TIFF支持、dlopen等错误,并将库文件推送到开发板上。最后,提供了一个简单的OpenCV摄像头测试程序和使用adb推送库文件的命令。
摘要由CSDN通过智能技术生成

注意问题:

1   路径问题

源文件路径           /home/litingting/openarm1/opencv-2.4.9

编译路径 (make make install)               /home/litingting/openarm1/build

生成的四个文件夹安装路径cmake  install prefix :        /home/litingting/openarm1/aa/


cmake find  root    /home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3

arm-linux-gcc路径     /home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-gcc

arm-linux-g++路径     /home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3/bin/arm-linux-g++


2  安装编译

解压OpenCV压缩文件,得到文件夹。

#cmake-gui 打开cmake的gui界面,开始进行配置,配置过程如下图所示:

1、选定解压后的源文件和将要编译的文件目录,这个自己之前先建好。

2、点击Configure 选择工程类型,选择交叉编译,点击下一步。

image


3、在下图的界面中选择交叉编译工具链以及库文件相关信息,按照图中的进行填写,其中红框部分为交叉编译工具链的实际路径,根据宿主机实际安装路径填写

image

4、点击Finsh完成初步配置。

5、此时主界面如下图所示,这时Cmake会读取程序的一些配置信息,可以再下图红框中对每一个编译选项进行修改,这里去掉WITH_TIFF支持并修改安装路径,其他配置可以根据需求选择。

image

make[2]: *** [bin/opencv_perf_core] 错误 1
make[1]: *** [modules/core/CMakeFiles/opencv_perf_core.dir/all] 错误 2
make: *** [all] 错误 2

关于TIFF的报错,是因为一开始我勾选了TIFF的支持,而这个支持是需要宿主机中安装相应的程序的,所以报错,可以打开cmake 去掉勾选。 其他报错经过查找找到以下解释:

编译时发现如下错误:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libcxcore.so: undefined reference to `clock_gettime'
../../lib/libcxcore.so: undefined reference to `pthread_key_create'
../../lib/libcxcore.so: undefined reference to `pthread_getspecific'
../../lib/libcxcore.so: undefined reference to `pthread_setspecific'

原因是cmake不认识我定义的arm-linux系统标记,没有加上库pthread和rt的链接选项

此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt

按照此方法更改对应文件,如下图所示:

image


此处在CMakeCache.txt 的173行,添加-lpthread -lrt,然后继续编译。编译过程十来分钟左右,编译成功结果如下:


image

运行make install进行安装,在我的安装目录中就会多出以下几个文件夹:

image


lib文件夹即生成的库文件,拷贝到开发板对应目录即可。



3  错误问题和验证

A 在CMakeCache.txt 的173行,添加-lpthread -lrt   此时需要修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt -ldl 开始

B   关于TIFF的报错,是因 为一开始我勾选了TIFF的支持,而这个支持是需要宿主机中安装相应的程序的,所以报错,可以打开cmake 去掉勾选。 其他报错经过查找找到以下解释:修改CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF,重新编译,错误消除。

出现错误:../../lib/libopencv_ocl.so: undefined reference to 'dlopen' 

                    ../../lib/libopencv_ocl.so: undefined reference to 'dlsym'

CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt -ldl 开始解决方法:在编译选项里添加 -ldl ,即Link dl library 。然后继续make,    


solution:
  
  You are supposed to either run
  LDFLAGS=-ldl make
  - that means run command make with LDFLAGS environment variable set to '-ldl' or run 
  make LDFLAGS+=-ldl
  - that passes command to make to add to LDFLAGS -ldl. Both say to make it should tell linker to use libdl.so (to find dlopen and dlsym)
  
  My solution: edit Makefile
  find LDFLAGS
  add LDFLAGS = -ldl

D

编译出现了警告:
/home/yr/ti-dvsdk_omapl138-evm_04_03_00_06/linux-devkit/bin/../lib/gcc/arm-arago-linux-gnueabi/4.3.3/../../../../arm-arago-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_core.so, needed by /usr/local/arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/home/yr/ti-dvsdk_omapl138-evm_04_03_00_06/linux-devkit/bin/../lib/gcc/arm-arago-linux-gnueabi/4.3.3/../../../../arm-arago-linux-gnueabi/bin/ld: warning: ../../lib/libopencv_imgproc.so, needed by /usr/local/arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)

这个问题是因为交叉编译器没有找到这两个库(网上是这么说的)。我将libopencv_core.so,libopencv_imgproc.so,这两个库拷贝到了
/home/yr/ti-dvsdk_omapl138-evm_04_03_00_06/linux-devkit/lib   中,即交叉编译器的lib中。
然后再运行编译命令。就ok了。没有任何错误和警告了

我的路径是   

/home/litingting/arm-linux/opt/FriendlyARM/toolschain/4.4.3/arm-none-linux-gnueabi/lib


E

#include <opencv/cv.h>  
#include <opencv/cxcore.h>  
#include <opencv/highgui.h>  
      
      
int main(int argc,char **argv)  
{  
    CvCapture* capture = NULL;  
    IplImage* frame = NULL;  
      
    if(!(capture = cvCaptureFromCAM(-1)))  
    {  
        fprintf(stderr, "Can not open camera./n");  
        return -1;  
    }  
      
    cvNamedWindow("video", 1);  
      
    while(frame = cvQueryFrame( capture ) )  
    {  
        cvShowImage("video", frame);  
    }  
      
    cvDestroyWindow("video");  
    cvReleaseCapture(&capture);  

    return 0;  
}  


编译   arm-linux-g++ -o  open open.cpp  -I  /home/litingting/openarm1/aa/include  -L /home/litingting/openarm1/aa/lib  -lopencv_core -lopencv_highgui  -lpthread -lrt



 adb push /home/litingting/openarm1/aa/lib/libopencv_calib3d.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_contrib.so   /system/lib
 
adb push /home/litingting/openarm1/aa/lib/libopencv_core.so   /system/lib
 
adb push /home/litingting/openarm1/aa/lib/libopencv_features2d.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_flann.so   /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_highgui.so   /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_gpu.so   /system/lib
 
adb push /home/litingting/openarm1/aa/lib/libopencv_imgproc.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_legacy.so   /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_ml.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_nonfree.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_objdetect.so   /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_ocl.so  /system/lib
 
adb push /home/litingting/openarm1/aa/lib/libopencv_photo.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_stitching.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_superres.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_video.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_videostab.so  /system/lib
adb push /home/litingting/openarm1/aa/lib/libopencv_ts.a  /system/bin 

adb push  /home/litingting/桌面/arm/open  /system

(并确保文件open属性为可执行)   chmod 777  open
 /system/bin/sh: ./hello: not found  编译时候加上-static

makefile:8: *** 遗漏分隔符 。 停止。  解决办法:在这一行前面加tab

如果想打开文件即跳转
vim +n FileName
命令模式下
:$   输入这个确定,就跳到最后一行了
:q! <回車>不保存退出。
:wq  <回車>保存并退出。
:n  跳到第n行
/word  后回车,即查找word 查找功能
vim刚进入时候是命令模式  不能对文本写入   按i进入编辑   按ESC退回命令模式


结束


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值