参考:https://meta.tn/a/31d3937558f20da247695af15df37e4538cc54bb71e63d632e653d82074d0d8d
步骤
1、在opencv源码目录创建arm_build目录(根据需求创建,为了区分x86的build)
2、启动cmake-gui,没有的话自行安装 sudo apt-get install cmake-qt-gui
3、填写第一行(源码路径),第二行(arm_build路径),add entry
NAME=CMAKE_AR;
Type=FILEPATH;
Value= /usr/bin/aarch64-linux-gnu-ar(在命令行输入which aarch64-linux-gnu-ar,即可看到该编译器路径,没有的话自行安装
sudo apt search aarch64 搜索可以安装的版本,这里安装sudo apt-get install g++-5-aarch64-linux-gnu)
4、点击configure,选择specify toolchain file for cross-compiling,然后设置toolchain file path 为
opencv(opencv源码目录)/platforms/linux/aarch64-gnu.toolchain.cmake
然后保存回到主界面即可。
5、点击主界面的advanced选项,可以看到各种配置,找到CMAKE_C_COMPILER和CMAKE_CXX_COMPILER填写aarch64版本的,我这里是在/usr/bin/aarch64-linux-gnu-g++(gcc)-5,根据需要开启c++11(ENABLE__CXX11),另外在CMAKE_CXX_FLAGS填入-std=c++11,以及是否编译shared library,再次点击configure之后,点击generate即可,如果没出错说明成功了。
我这里出现了错误,cxx_std_11这个标志识别不出来,我在opencv/modules目录下搜索该标志find ./ | xargs grep "cxx_std_11",在一个cmake里找到了,然后将其删除了。
6、进入arm_build目录,使用make -j4 命令多线程编译源码,可能会出现错误,例如,cuda的问题
Could NOT find CUDA (missing: CUDA_INCLUDE_DIRS) (found suitable exact
version "8.0")
Call Stack (most recent call first):
/usr/local/share/cmake-3.11/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
/usr/local/share/cmake-3.11/Modules/FindCUDA.cmake:1085 (find_package_handle_standard_args)
/home/changkun/opencv/arm_build/OpenCVConfig.cmake:86 (find_package)
/home/changkun/opencv/arm_build/OpenCVConfig.cmake:105 (find_host_package)
CMakeLists.txt:17 (find_package)
解决方案,进入vim /usr/local/share/cmake-3.11/Modules/FindCUDA.cmake,找到1085行,使用set(CUDA_INCLUDE_DIRS cuda's path),写死该变量,即可编译通过
7、安装opencv_contrib库
找到 OPENCV_EXTRA_MODULES_PATH 项,选择扩展库源码 opencv_contrib 目录下的 modules 目录
点击 Configure ,生成配置,点击 Generate ,生成 Makefile。进入arm_build目录重新编译opencv即可。