库编译:opencv 交叉编译静态库

时间:2024-03-26 09:08:54

一 概述

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,在图片处理中比较常见、性能比较优越但编译相复杂、译时间较长、因此将编译方法提供出来,用于记录学习。

二 下载 opencv

官网下载地址
https://www.opencv.org/releases.html
自上传下载地址

三 编译

1 安装Opencv依赖环境

[编译器] > sudo apt-get install build-essential
[必须安装] > sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[可选择安装] > sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

2 安装Cmake

sudo apt-get install cmake

3 运行Camke 配置opencv编译项

(1) 新建 build 文件夹

cd opencv-3.4.1
mkdir build

(2) 运行cmake

sudo cmake-gui

(3) 配置选项

<1> 配置 源文件路径 和 编译路径
源文件路径: …/opencv-3.4.1
编译路径: …/opencv-3.4.1/build

如下图:
库编译:opencv 交叉编译静态库

<2> 点击Configure 选择 specify options for cross-compiling
备注:
交叉编译选择 specify options for cross-compiling
linux编译选择 use default native compilers
如图:
库编译:opencv 交叉编译静态库

<3> 点击next 配置编译工具链
Operation system: arm-linux
C: /opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin/arm-hisiv600-linux-gcc
c++: /opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin/arm-hisiv600-linux-g++
target root: /opt/hisi-linux/x86-arm/arm-hisiv600-linux/target
include mode : 选择 search only target root
最后点击finish
如图:
库编译:opencv 交叉编译静态库

<4> 配置编译选项
CMAKE_INSTALL_PREFIX 配置安装路径 例如:/home/xhw/share/arm/arm_hisi/opencv
BUILD_opencv_world 选择后opencv生成一个总的库
BUILD_SHARED_LIBS 如果选择编译静态库,则取消勾选

<5> 点击 Generate 生成

4 编译

cd opencv-3.4.1/build
sudo make
sudo make install

建议 配置CMakeCache.txt 文件 CMAKE_EXE_LINKER_FLAGS项的参数如下:
建议参数1 -lrt -ldl -lpthread
建议参数2 -lrt -ldl -lm -lstdc++ -lpthread
可先配置 建议参数1

5 错误修改

错误1
/home/huangea/opencv-3.4.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc:51:2: error: #error “No suitable threading library available.”
解决方法:
查看opencv-3.4.0/3rdparty/protobuf/src/google/protobuf/stubs/common.cc文件,发现是找不到HAVE_PTHREAD宏定义导致找不到pthread库,本文解决办法就是在该文件加上该句宏定义(临时解决,有其他更好的方法欢迎告知探讨)#define HAVE_PTHREAD

错误2
…/…/lib/libopencv_core.so: undefined reference to pthread_key_create' ../../lib/libopencv_core.so: undefined reference topthread_getspecific’
…/…/lib/libopencv_ts.so: undefined reference to `pthread_key_delete’
解决方法:
修改目录下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS原来为空,加上-lpthread -lrt

错误3
undefined reference to dlopen' undefined reference todlerror’
undefined reference to `dlsym’
解决方法 修改目录下的CMakeCache.txt,CMAKE_EXE_LINKER_FLAGS 增加-ldl

错误4
libz.so: file not recognized: File format not recognized
解决方法:
在cmake-gui配置是勾选上BUILD_ZLIB