交叉编译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文件系统即可解决这个问题。 

相关文章推荐

arm-linux-gnueabihf编译器在ubuntu环境下交叉编译opencv2.4.10

这两天因为要在arm板子上跑基于opencv的程序,故对opencv2.4.10在ubuntu环境下用arm-linux-gnueabihf进行了编译。中间遇到了很多问题,现在把整个经过记录下来,以供...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Linux下海思3516A交叉编译opencv2.4.13

一、准备工作1、Hi3516A SDK包位置 在”Hi3516A_V100R001***/01.software/board”目录下,您可以看到一个 Hi3516A_SDK_Vx.x.x.x...

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

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

Matlab 制作《最炫民族风》弱爆了,附代码

大家可以在Matlab下实验下。。。。。。% Most shining national wind//最炫民族风 on Matlab % The Modification is from "cano...

97年Mekka ’97 4K Intro比赛的一等奖作品

这个程序是97年Mekka ’97 4K Intro比赛的一等奖作品,汇编语言所写。整个程序全长4095字节, 生成.com程序只有4K,可是却实现了3D动画的效果,还有一段背景音乐!画面是游戏天旋地...
  • syl469
  • syl469
  • 2013年02月22日 14:09
  • 1080

friendlyarm6410交叉编译OpenCV2.3.1

我的系统是Ubuntu11.10,开发板是友善6410的,和作者的不一样,但是遇到的问题大同小异, 给出楼主的博客地址:blog.csdn.net/sun_x_t/article/details/7...

opencv3.0交叉编译用parallel.cpp

  • 2016年02月16日 02:18
  • 9KB
  • 下载

Linux OpenCV交叉编译环境安装

  • 2012年10月09日 16:19
  • 2.38MB
  • 下载

交叉编译OpenCV1.0.0

参考: http://wiki.opencv.org.cn/index.php/Template:Install ./configure --host=arm-linux --without-gt...
  • dyzok88
  • dyzok88
  • 2014年12月22日 15:22
  • 677
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:交叉编译OpenCV2.3.1
举报原因:
原因补充:

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