在ubuntu18.04上交叉编译opencv2.4.9

公司项目中用到了opencv,但是当时项目比较着急,因此同事直接给了编译好的opencv的库,自己并没有尝试从头去编译,项目结束后有点时间,于是自己尝试去从头交叉编译opencv,现在把过程记录一下,后面再需要对OpenCV别的版本进行交叉编译的时候可以直接看自己的笔记。

环境

PC:vmware + ubuntu18.04

交叉编译工具链:arm_hisiv300_linux(HISI3536的交叉编译工具)

opencv版本:opencv-2.4.9.zip

交叉编译

下载opencv2.4.9源码,然后解压,

安装cmake-gui

    

1 sudo apt-get install cmake-gui

创建build文件用于编译opencv,创建install文件夹作为输出目录

1 cd opencv-2.4.9
2 mkdir build
3 mkdir install

然后执行cmake-gui,出现如下界面

选择source code为opencv2.4.9的路径,选择build the binaries为我们刚才新创建的build文件夹。

然后点击configure出现如下画面

选择specify options for cross-compiling,next,然后出现如下界面。

在operating system填写arm-hisiv300-linux,

Compiler C选择自己的arm-hisiv300-linux-gcc的路径,

C++编译器选择arm-hisiv300-linux-g++的安装路径,

Target root选择自己的交叉交叉编译工具所在的文件夹,并且选择search in Target root ,then native system.

然后点击configure,这时候会出现error inconfiguration process,project files may be invalid.

解决方法是在search中搜索CUDA,把WITH_CUDA取消掉,搜索opencl把WITH_OPENCL去掉,再次选择就不会出现问题。

在search中搜索install,把CMAKE_INSTALL_PREFIX修改为自己刚才创建的install文件夹,

如果想让我们编译出来的opencv库为静态链接库的话,可以在search里面搜索shared,把BUILD_SHARED_LIBS选上,这样编译出来的opencv库就是.a结尾的静态链接库了。

另外,configure的过程中可能还会有下面的提示

然后很多编译opencv的博客教程在编译opencv的时候会有一步: 从网上zlib、libjpeg、libpng、tiff、ffmjpeg的源码,然后对这几个库的源码进行交叉编译,实际上不用这样做,我们下载的opencv源码里面有这几个库的源码,我们只需要在cmake-gui上把相应的选项选上,这样编译opencv的过程中会把这个库编译出来,例如

这样之后就能产生jpeg库了,同样的方法可以编译zlib等其他几个库,

然后点击generate,然后就可以关闭cmake_gui了,

然后开始编译

1 cd build/
2 make

编译的过程中会报对pthread_once未定义的引用,对pthread_spin_lock未定义的引用等错误,

解决方法:打开build文件夹下的CMakeCache.txt,定位到190行左右,把CMAKE_EXE_LINKER_FLAGS:STRING =改为CMAKE_EXE_LINKER_FLAGS:STRING = -pthread -lrt

然后make

然后make install

这样就会在install文件夹下生成opencv库,在install的share-3rdparty文件夹下会生成zlib jpeg等几个库。

测试验证

编译完opencv之后想在项目中对自己编译完的OpenCV库进行验证,出现错误,

刚开始觉得是自己编译的opencv存在问题,于是一遍又一遍的从头编译,问题依然存在,差点要重新安装了ubuntu14版本重新编译,直到搜索到下面的答案

原来是因为imgproc是依赖于core的,被依赖的库要放到后面,于是修改自己的makefile,把-loencv_core放到了-lopencv_imgproc的后面,于是编译通过,程序测试运行通过.

success!

猜你喜欢

转载自www.cnblogs.com/cumtchw/p/11102530.html