交叉编译OpenCV2.3.1

转载 2012年03月23日 15:47:38

我的系统是Ubuntu11.10,开发板是友善6410的,和作者的不一样,但是遇到的问题大同小异,

给出楼主的博客地址:blog.csdn.net/sun_x_t/article/details/7261944

环境:arm开发板是 ok6410,主机是Ubuntu10.04


1,准备工作:交叉编译工具用光盘自带的arm-linux-4.4.1.tar.gz,解压到/usr/local/arm目录下(将/usr/local/arm/bin加入环境变量);下载opencv2.2的源码;安装cmake build-essential;安装必要的库:  libgtk2.0-dev libavcodec-dev libavformat-dev libswscale-dev libjpeg62-dev libtiff4-dev  libjasper-dev

2,用到的主要目录说明:
交叉编译工具链所在  /usr/local/arm
编译好的opencv库所在  /usr/local/opencv-arm
安装opencv的目录     /usr/local/arm-linux
opencv源码所在      ~/tiaozhansai/OpenCV-2.2.0

3,在终端运行sudo cmake-gui  
    选择源代码目录:/home/xin/tiaozhansai/OpenCV-2.2.0
      选择Build目录:/usr/local/opencv-arm/
       点击Configure,保持generator为Unix Makefiles,选择Specify options for cross-compiling,点击Next,
       Operating System填写arm-linux
       C Compilers填写/usr/local/arm/4.4.1/bin/arm-linux-gcc
       C++ Compilers填写/usr/local/arm/4.4.1/bin/arm-linux-g++
       程序库的Target Root填写/usr/local/arm/4.4.1/
然后点击Finish。
修改默认配置,默认安装目录为/usr/local,为便于查找生成的库文件,把CMAKE_INSTALL_PREFIX变量改为/usr/local/arm-linux  ,点击Generate生成Makefile。

4,在/usr/local/opencv-arm目录下$sudo make
(1),80%报错:
。。。。/home/xin/tiaozhansai/OpenCV-2.2.0/modules/ml/src/gbt.cpp:474: error: 'expl' was not declared in this scope

    修改gbt.cpp中14行,16行:注释掉

                    //#if ANDROID

                    #define expl(x) exp(x)
                    //#endif
        错误消除。

(2),83%报错:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_core.so: undefined reference to `clock_gettime'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
../../lib/libopencv_core.so: undefined reference to `pthread_key_create
    解决方法:修改CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt,重新编译,错误消除 

(3),83%报错:
Linking CXX executable ../../bin/opencv_createsamples
../../lib/libopencv_highgui.so: undefined reference to `_TIFFerrorHandler'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFrealloc'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmalloc'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcpy'
../../lib/libopencv_highgui.so: undefined reference to `TIFFOpen'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFfree'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFwarningHandler'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemcmp'
../../lib/libopencv_highgui.so: undefined reference to `_TIFFmemset'
    解决方法:修改CMakeCache.txt,WITH_TIFF:BOOL=ON,改成OFF(不再对TIFF图像格式支持。这里我前面已经装过libtiff4-dev,但是编译报错,我不明白是为什么),重新编译,错误消除。

(4),96%报错:
CMakeFiles/opencv_test.dir/src/highguitest.obj: In function `CV_HighGuiTest::run(int)':
highguitest.cpp:(.text._ZN14CV_HighGuiTest3runEi+0x18): warning: the use of `tmpnam' is dangerous, better use `mkstemp'
../../lib/libopencv_features2d.so: undefined reference to `cv::SIFT::SIFT(double, bool, bool, int, int, int, int)'
    解决方法:在OpenCV2.2.0/modules/features2d/src/sift.cpp下 
            #ifdef __arm__
            #define ARM_NO_SIFT
            #endif   
        注释掉#define ARM_NO_SIFT.错误消除,
成功!

$sudo make install 

5,opencv库复制到ok6410,并测试
(1)借用某个博客上的测试程序,来测试编译的是否成功。
新建test.cpp:
    // test.cpp  
      
    #include <cv.h>  
    #include <cxcore.h>  
    #include <highgui.h>  
      
      
    int main()  
    {  
            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;  
    }  

编译test.cpp:$ arm-linux-g++ -I/usr/local/arm-linux/include/opencv/ -L/usr/local/arm-linux/lib/ -lcv -lcxcore -lhighgui -lpthread -lrt -o test test.cpp
报错:/usr/local/arm/4.4.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.4.1/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lcv

google之,发现这个问题是找不到libcv.so这个动态库。
通过find命令发现在/usr/local/arm-linux/lib/下面确实没有这个库,而且这个目录下的库都是libopencv*形式的,我猜测是不是opencv2.2相比2.1作了不少改动,网上调研发现确实时这样的,opencv2.2重新组织库结构,用较详细,更小的模块来取代cxcore, cv, cvaux, highgui 和 ml库.
于是,试着把命令改成:$ arm-linux-g++ -I/usr/local/arm-linux/include/opencv/ -L/usr/local/arm-linux/lib/ -lopencv_core  -lopencv_highgui -lpthread -lrt -o test test.cpp
结果还是报上面的错误,这次我注意到它是在。。。/arm-none-linux-gnueabi/。。这个目录下找动态库的,也就是说,尽管我指定了头文件,库文件的搜索路径,但是它没有去我指定的路径下找。于是我把/usr/local/opencv-arm/include/opencv/下的头文件和/usr/local/opencv-arm/lib下的动态库全都拷贝到/usr/local/arm/4.4.1/arm-none-linux-gnueabi下面对应的目录下,然后再编译:
$ arm-linux-g++ -lopencv_core -lopencv_highgui -lpthread -lrt -o test test.cpp 

成功!

(2)将库文件s 和 编译好的测试程序test 拷贝到开发板测试
用sd卡拷贝,遇到问题:
cp: cannot create '../../lib/libopencv_calib3d.so': Read-only file system       
cp: cannot create '../../lib/libopencv_contrib.so': Read-only file system       
cp: cannot create '../../lib/libopencv_core.so': Read-only file system  

这个跟cramfs文件系统是只读的文件系统相关,烧写yaffs文件系统即可解决这个问题。 

交叉编译并移植opencv3.0.0到arm板

问题项目需求,交叉编译opencv,并移植到arm中。 在opencv2.0以上的版本编译都要借助于cmake工具生成Makefile 2.0一下版本才是使用configure生成Makef...
  • gatieme
  • gatieme
  • 2015年10月13日 11:47
  • 12099

OpenCV ARM移植(交叉编译opencv) arm-oe-linux-gnueabi-gcc编译opencv3.1.0

 Cmake的安装 OpenCV 2.2以后版本需要使用Cmake生成makefile文件,因此需要先安装cmake。 ubuntu下安装cmake比较简单, apt-get in...
  • yueguanyun
  • yueguanyun
  • 2016年04月28日 15:32
  • 4561

Ubuntu15.04交叉编译opencv到ARM全过程

宿主机:Ubuntu15.04(64位系统) 目标机:飞凌OK6410 交叉编译器:arm-none-linux-gnueabi-4.3.2 一、安装交叉编译器 交叉编译器使用飞凌官方提供,将 a...
  • g110802008
  • g110802008
  • 2016年09月02日 19:06
  • 1556

Opencv2.4.9交叉编译

参考:http://blog.csdn.net/stihy/article/details/51288743  经过一个多星期苦逼中,终于把Opencv交叉编译通过了。废话不多说,把我过程分享出来,...
  • yueguanyun
  • yueguanyun
  • 2016年05月05日 13:48
  • 7691

OpenCV交叉编译

参考几篇博客 1.交叉编译opencv2.31与移植至arm9: http://blog.csdn.net/embeddedman/article/details/7416934 2...
  • herhero
  • herhero
  • 2016年01月09日 22:30
  • 2444

从零开始搭建opencv3.0交叉编译环境(Ubuntu14.04+eclipse)(三)

这里到opencv3.0.0的安装了 宿主机:Ubuntu14.04LTS 32bit OpenCV3.0.0 IDE:eclipse
  • u012354697
  • u012354697
  • 2016年02月13日 23:49
  • 2582

Ubuntu14.04 Opencv2.4.9交叉编译

opencv2.4.9 ubuntu14.04 cmake 交叉编译
  • stihy
  • stihy
  • 2016年05月01日 00:00
  • 3967

交叉编译opencv3.1.0和opencv_contrib/,在R16上运行HelloOpencv程序

http://www.cnblogs.com/asmer-stone/p/5089764.html http://blog.csdn.net/gatieme/article/details/49080...
  • tankaro
  • tankaro
  • 2017年07月05日 15:36
  • 444

【OpenCV3】Opencv3.2.0在Hisi3521下的交叉编译和移植

hisi3520、hisi3521这两年在图像视频处理领域的应用越来越广泛,作为图像处理神器opencv与其结合能产生极好的化学反应,这里就介绍下如何在hisi3521下交叉编译和安装opencv。...
  • guduruyu
  • guduruyu
  • 2017年06月13日 11:32
  • 2201

opencv交叉编译arm环境库,静态,动态库和可执行程序

在工作中遇到把基于opencv的代码移植到板子上运行,在网上查看了很多资料,尝试了两种方案,都是可行的 1.把opencv代码用ndk的方式编译成可执行文件,直接放到板子上运行,这种方式是最便捷的不...
  • student_swu
  • student_swu
  • 2017年09月07日 20:59
  • 149
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:交叉编译OpenCV2.3.1
举报原因:
原因补充:

(最多只允许输入30个字)