编译环境
-
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 -j16
16线程编译,多线程需要根据当前电脑的硬件配置(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 平台使用,可以通过交叉编译,在嵌入式平台上使用