编译环境
-
win10 64 位
-
VMware Workstation Pro 16 虚拟机
-
虚拟机安装 ubuntu 20.04
-
opencv 版本: 来自 github 当前最新 4.7
目的
- 交叉编译 opencv 生成静态库(.a),用于 嵌入式 aarch64 平台。
环境配置方法
- 参考上一篇 ubuntu 20.04 aarch64 平台交叉编译 opencv
生成静态库
- 默认会生成 动态库(so),可以通过cmake 配置
-DBUILD_SHARED_LIBS=OFF
关闭动态库生成,这样就可以生成静态库了
cmake -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-musl.toolchain.cmake .. -DCMAKE_CXX_FLAGS="-march=armv8-a --static" -DCMAKE_C_FLAGS="-march=armv8-a --static" -DBUILD_SHARED_LIBS=OFF
其他
-
如果感觉 cmake 的命令太长,可以把各个配置放进
platforms/linux/aarch64-musl.toolchain.cmake
里面,这样 cmake 命令就会很精简 -
打开
vim platforms/linux/aarch64-musl.toolchain.cmake
,然后进行各个特性或者第三方库的开关配置
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")
set(CMAKE_BUILD_TYPE "Release")
set(WITH_CAROTENE OFF)
set(WITH_ITT OFF)
set(WITH_OPENCL OFF)
set(WITH_ADE OFF)
include("${CMAKE_CURRENT_LIST_DIR}/arm.toolchain.cmake")
-
set(CMAKE_BUILD_TYPE "Release")
编译 Release 版本 -
set(WITH_ITT OFF)
关闭了 itt 相关 -
set(WITH_CAROTENE OFF)
关闭了 第三方库 CAROTENE -
set(WITH_OPENCL OFF)
关闭了 OPENCL -
set(WITH_ADE OFF)
关闭 ADE
编译
-
make,可以 make -j12 等多线程编译,大大加快编译速度,当然编译的电脑硬件配置要高一些,多核 大内存
-
make install,可以把生成的 opencv 库存放到 当前的目录
build_a/install
目录下,由于是交叉编译,所以需要额外注意 安装路径,不要安装到 系统的目录下。
查看编译产物
- make 编译完成后,执行
make install
,会存放到指定路径,默认不配做,会在当前的build路径下,如build_a/install
目录
小结
-
可以配置 cmake,开关各个需要的选项,包括第三方库等
-
可以生成静态的 opencv 库,不过使用静态库,静态连接,这样应用程序体积会比较大