opencv交叉编译详解:
背景:
由于需要做图像合成测试,好吧,外包给的工程居然是VC MFC的,好吧,吭呲吭呲移植到linux下,很快ubuntu下跑起来了;
接下来需要移植到arm。
第一步:下载源码
https://github.com/opencv/opencv/archive/3.2.0.zip 第二步:解压,进入文件夹建立build临时目录
tar -xf opencv.tar.gz; cd opencv; mkdir build_arm; cd build_arm;
第三步:export设置使用的编译器如export CC=arm-linux-gcc,export CXX=arm-linux-g++; 开始cmake配置安装目录
cmake …/sources -DCMAKE_INSTALL_PREFIX=`pwd`/__install
第四步:解决编译错误
1)编译第三方库时找不到zlib库头文件,先使用export zlib头文件路径到C_INCLUDE_PATH变量的方法;然而
编译IlmImf时还是找不到zlib头文件,于是修改第一次cmake生成的cmakecache.txt将BUILD_ZLIB:BOOL=OFF打开,
重新cmake;
根据Cmake时的打印结果,发现还有很多其他库没有指定,好吧,都使用OPENCV内建的库,懒得自己去找第三方库了,
重新修改cmakecache.txt把需要用到的第三方库都选上,如BUILD_PNG:BOOL=ON,BUILD_JPEG:BOOL=ON,
BUILD_TIFF:BOOL=ON…
2)cmake之后make, 一直到36%, 好像一直没出现错误,好吧,慢慢等。。。%38。。。%39。。。%43,
额,终于出错了,一大堆link不到第三方库的错误,好吧。一看是连接opencv_videoio.so这个库时找不到这些第三方库,
好吧这个库我用不到,跳过,
重新修改cmakecache.txt,BUILD_opencv_video=OFF
BUILD_opencv_videostab=OFF,make clean,重新编译;
3)higui模块连接也需要好多第三方库,好吧,我也用不到,我不需要gui,如法炮制,修改cmakecache.txt,把BUILD_higui也关闭;
,make clean,重新编译;
第五步:
make install安装opencv到预先配置的安装目录。
第六步:
在运行调用opencv库函数的程序时如果找不到opencv的运行库,
可以临时export opencv运行库位置到LD_LIBRARY_PATH目录哦, such as:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/pubut/src/opencv/build/__install/lib
永久的办法就是将运行库拷贝到/lib或者/usr/local/lib等目录。
总结:
1、opencv源码包含了几乎所有需要用到的第三方库,不需要额外交叉编译第三方库,直接在cmakelist或者cmakecache中打开即可。
2、opencv一些video和gui模块需要gtk+等第三方库,
如果只是做图片处理不显示界面可以直接在cmakelist或者cmakecache中关闭它。
如果需要做以上工作,好吧,那就得交叉编译gtk+,gdm等ui库并在opencv的编译配置中指定他们的目录。