编译环境
- win10 64 位
 - VMware Workstation Pro 16 虚拟机
 - 虚拟机安装 ubuntu 20.04
 - opencv 版本: 来自 github 当前最新 4.7
 
目的
- 交叉编译 opencv,用于 嵌入式 aarch64 平台
 
下载 opencv
- 可以直接从 github 下载 release 版本或者 使用 git clone 最新的 opencv 仓库
 - github opencv https://github.com/opencv/opencv
 git clone https://github.com/opencv/opencv.git
编译的配置文件
- 这里使用交叉编译工具链 
aarch64-linux-musleabi-gcc,也可以使用 ARM 官方提供的aarch64-linux-gnu-gcc - 配置文件:
platforms/linux/aarch64-gnu.toolchain.cmake复制一份,改为platforms/linux/aarch64-musl.toolchain.cmake,当然也可以直接使用现有的 - 修改 
platforms/linux/aarch64-musl.toolchain.cmake中交叉编译工具链的 名称:这里改为了"aarch64-linux-musleabi" 
set(CMAKE_SYSTEM_PROCESSOR aarch64)
set(GCC_COMPILER_VERSION "" CACHE STRING "GCC Compiler version")
set(GNU_MACHINE "aarch64-linux-musleabi" CACHE STRING "GNU compiler triple")
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")配置交叉编译工具链
- 下载并解压 aarch64 交叉编译工具链,然后配置 环境变量,这里修改 
sudo vim /etc/profile文件,在文件末尾增加export PATH=$PATH:/home/zhangsz/linux/tools/aarch64-linux-musleabi_for_x86_64-pc-linux-gnu/bin,也就是把交叉编译工具链的路径 导出到环境变量 source /etc/profile生效,可以输入aarch64-linux-musleabi-gcc -v确认 gcc 交叉编译工具链生效

编译 opencv
- opencv 默认使用 cmake 进行配置,生成 动态库(so)的 操作步骤如下
 - 在 opencv 目录下,创建一个文件夹,如 build_so
 cd build_so进入build_so目录,然后执行cmake 配置命令:
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-musl.toolchain.cmake .. -DCMAKE_CXX_FLAGS="-march=armv8-a" -DCMAKE_C_FLAGS="-march=armv8-a" -DBUILD_SHARED_LIBS=ON -DWITH_ADE=OFF
- 注意 
-DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-musl.toolchain.cmake表示 使用自己定义的 gcc 交叉编译配置文件 -DBUILD_SHARED_LIBS=ON表示 生成 动态库 (so)-DCMAKE_CXX_FLAGS="-march=armv8-a" -DCMAKE_C_FLAGS="-march=armv8-a"可以指定生成的平台:armv8-a- 最后注意 cmake 执行路径,有个 
..,也就是上一级是 opencv 目录,当前在opencv/build_so目录下执行 cmake 命令 
配置清单
- 执行完 cmake 后,会生成 make 的清单,但还没有开始编译
 

- 这里需要注意 交叉编译工具链的路径是否正确的识别到,如果没有识别到,注意重新设置 gcc 交叉编译工具链的环境变量
 

- 如果没有配置 install 安装目录,默认会安装 在 build_so 目录下的 install 目录,注意如果是交叉编译的 opencv 库,不能安装到当前PC ubuntu 系统的路径下。因为 ubuntu 系统是 x86/64 平台的
 
make 开始编译
- 输入 
make开始编译,可以多线程编译,如make -j1616线程编译,多线程需要根据当前电脑的硬件配置(CPU 核数)进行调整。 - 虚拟机 ubuntu 编译,建议使用高性能电脑,虚拟机设置 8核 CPU 与 8GB以上内存。
 

- 编译完成后, 
make install,这样 opencv 生成的库与头文件等,都会存放到 当前build_so/install目录下 
查看产物
- opencv 默认产物的路径: 
build_so/install 
zhangsz@zhangsz:~/rtt/opencv/opencv/build_so/install$ ls
bin  include  lib  share
小结
- opencv 可以通过 cmake 文件或者 cmake 命令,配置某些第三方软件包、特性的开启与关闭
 - opencv 如今不仅可以在 PC 平台使用,可以通过交叉编译,在嵌入式平台上使用
 
                










