ubuntu ARM下OpenCV的交叉编译
需求
最近开始用xilinx zcu102,需要将OpenCV部署进去
环境及工具
编译环境:Ubuntu16.04 交叉编译工具链: gcc-linaro-6.4.1-2017.08-x86_64_aarch64-linux-gnu (可修改为与petalinux相同版本的gnu工具) OpenCV源码:用的是opencv-3.4.3 若未安装cmake及cmake-gui编译工具,执行:
sudo apt install cmake sudo apt install cmake-qt-gui
其他依赖库:
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff4-dev libswscale-dev libjasper-dev
利用cmake-gui进行相关配置
1.cmake-gui界面配置opencv,并生成Makefile
任意目录下进入cmake-gui界面:
source code源码:选择解压出来的opencv目录 build the binaries编译目录:自行创建一个build目录
2.配置生成目标选项
点击configure,配置如下图 配置两项:Unix Makefile、Specify options for cross-compiling 点击next
3.配置编译器
配置如下图: Operating System操作系统:arm-linux 编译器 C:选择交叉编译器的gcc,如 aarch64-linux-gnu-gcc 编译器 C++:选择交叉编译器的g++,如aarch64-linux-gnu-g++ Target Root:选择交叉编译器的bin目录 完成,点击 Finish
4.指定编译内容/路径等配置
勾上 BUILD_JPEG 和 BUILD_PNG (此2项可选) 取消掉WITH_OPENCL和OPENCV_DNN_OPENCL,否则会出现cl相关问题 配置安装目录 默认是/usr/local,自行创建一个目录,如/usr/local/arm/opencv-arm1
5.执行配置,生成Makefile
配置完成,再次点击Configure,点击Generate
编译/安装opencv
1.查看是否已经生成Makefile
进入编译目录(即前面配置的“build the binaries编译目录”),可看到刚刚生成的Makefile文件:
2.执行编译
make
3.错误及解决:
错误1:没有连接到pthread库和dl库 …/…/lib/libopencv_core.so: undefined reference to pthread_mutexattr_destroy ../../lib/libopencv_core.so: undefined reference topthread_create’ …/…/lib/libopencv_core.so: undefined reference to dlopen ../../lib/libopencv_core.so: undefined reference topthread_mutex_trylock’ …/…/lib/libopencv_core.so: undefined reference to clock_gettime ../../lib/libopencv_core.so: undefined reference todlsym’ …/…/lib/libopencv_core.so: undefined reference to pthread_mutexattr_settype ../../lib/libopencv_core.so: undefined reference topthread_join’ …/…/lib/libopencv_core.so: undefined reference to `pthread_mutexattr_init’ 解决方法: 修改编译目录下的 CMakeCache.txt 文件: 找到 CMAKE_EE_LINKER_FLAGS:STRING 项: //Flags used by the linker. CMAKE_EXE_LINKER_FLAGS:STRING=’ ’ 修改成以下: //Flags used by the linker. CMAKE_EXE_LINKER_FLAGS:STRING= -pthread -lrt -ldl @注:网上有些人写-lpthread 是错误的
错误2:protobuf相关问题 若用不到opencv 中的DNN深度学习相关功能,protobuf此处可暂时关掉,粗暴有效(我用过几天用opencv加载caffemodel及prototxt做推理,但后续没有继续,故此处不做详细说明) 解决方法: 修改编译目录下的CMakeCache.txt文件: 找到BUILD_PROTOBUF:BOOL= 项: //Force to build libprotobuf from sources BUILD_PROTOBUF:BOOL=ON 修改成以下: //Force to build libprotobuf from sources BUILD_PROTOBUF: BOOL=OFF
错误3: 解决方法:在以下文件最顶端添加两行 修改完成,再次cmake
4.安装
make install
安装好的库目录下有这几个文件夹: bin include lib LICENSE pkgconfig share 其中lib下是我们想要的要移植到开发板上的库(动态库,亦可配置编译静态库) 以上
