网站菜单

ARM嵌入式开发——Windows下CLion与OpenCV交叉编译环境搭建

前置步骤:

安装CLion,参考前文,此处不做展开

最终开发环境:

  • CLion2019 3.3
  • CMake 3.15.5
  • MinGW w64 6.0
  • MinGW w64 GDB 8.1
  • gcc-arm-9.2-2019.12-mingw-w64-i686-aarch64-none-linux-gnu
  • OpenCV 3.4

工具包打包下载链接:百度网盘 提取码:de1t

第一步:安装MinGW-w64

首先安装MinGW-w64,下载完成后,一路默认安装即可。

安装完成后还需要将bin路径添加到环境变量中。后续的CMake等也需要添加到环境变量,这里只展示一次。

控制面板–>(搜索)高级系统设置–>环境变量

在<用户环境变量>分区 –> 新建,名字选择mingw64,路径选择安装文件的bin路径

双击Path变量,在编辑环境变量选项卡中选择新建,填入%mingw64%,点击确定。重启电脑。

在CMD中输入gcc -v,看到版本则代表安装成功。

第二步:安装CMake与ARM交叉编译ToolChains

同MinGW-w64,下载安装完成以后,将bin目录添加到环境变量path中。

在CMD中输入命令cmake –version确认cmake。

输入aarch64-none-linux-gnu-g++确认交叉编译toolchain。

第三步:配置CLion

与前文提到的Ubuntu下CLion配置大同小异,这里放上截图仅供参考。

需要注意的是,在CMakeLists.txt中,需要声明CMAKE_SYSTEM_NAME与CMAKE_SYSTEM_PROCESSOR,否则不会调用交叉编译器。这个参数是利用cmake进行交叉编译必须设置的,通常都是Linux或者Windows,声明要利用cmake创建运行在目标系统上的文件。系统选择Linux,如果要创建运行在没有操作系统的嵌入式环境,该参数要设置成Generic。CMAKE_SYSTEM_PROCESSOR设置为aarch64。否则build会报错Cannot find any CMake profile。另外,CLion的CMake设置也需要修改,CMake options添加-DCMAKE_BUILD_TYPE=Debug。(下图仅写了NAME没有写PROCESSOR,应该写上)

Hello World便可以成功编译了!

第四步:安装OpenCV

  1. 在OpenCV官网,下载对应版本号的OpenCV,选择windows版本下载。

2. 在解压的目录中,新建cross-build文件夹用于存放一会儿编译后的OpenCV包。

3. 打开cmake-gui,source code选择opencv的sources文件夹,binaries选择cross-build文件夹。

4. 在菜单中选择Tools –> Configure。选择MinGW Makefiles与Specify options for cross-compiling.

5. 笔者的开发板为Linux的Debian10,架构为aarch64,填入对应的信息。Compilers选择之前步骤安装的交叉编译器。

6. 点击finish,开始第一次config,之后再点击一次config直到选项框中没有红色以后,点击Generate,完成编译。

7. 进入编译完成的cross-build文件夹,找到3rdparty/libpng/CMakeLists.txt,在最上面加上:

SET(ARM 1)
SET(ENABLE_NEON 1)

8. 返回cross-build文件夹,进入CMD

mingw32-make
make install

9. 和之前步骤一样,在环境变量中添加opencv。

10. 重启。至此,OpenCV环境就搭建完毕了。

第五步:CLion中读取OpenCV

这里附上CMakeList.txt的写法:

cmake_minimum_required(VERSION 3.15)

#cross compile
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

project(untitled1)

#find opencv
#由于添加了环境变量,因此不需要指定路径
#set(OpenCV_DIR "C:\\DevelopmentEnvironment\\OpenCV3.4.5\\opencv\\cross-build\\install")
#set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} "C:\\DevelopmentEnvironment\\opencv-3.4\\aarch_64_install\\share\\OpenCV")
find_package(OpenCV REQUIRED)
#head file
include_directories(${OpenCV_INCLUDE_DIRS})

set(CMAKE_CXX_STANDARD 14)

add_executable(untitled1 main.cpp)

#link library
target_link_libraries(untitled1 ${OpenCV_LIBS})

需要注意的是,交叉编译的声明要在项目的声明之前

Extra:修改OpenCV包使其可在别的设备使用

  • 修改OpenCVModules.cmake文件中的IMPORT_LOCATION_RELEASE从绝对路径改为包含{OpenCV_DIR}的相对路径,其中OpenCV_DIR于项目的CMakeList中赋值。
  • 修改OpenCVConfig文件中的OpenCV_INCLUDE_DIRS从绝对路径到相对路径

下图仅做举例

项目CMakeList.txt参考,关键是定义包,lib, include的位置

cmake_minimum_required(VERSION 3.15)

#cross compile
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

set(CMAKE_CXX_STANDARD 14)
project(untitled)
add_executable(untitled main.cpp)

#define opencv location
set(OpenCV_DIR "C:/DevelopmentEnvironment/OpenCV/cross-build")
#find package, include and lib
find_package(OpenCV REQUIRED)
set(OpenCV_INCLUDE_DIRS "C:/DevelopmentEnvironment/OpenCV/cross-build/install/include")
set(OpenCV_LIBRARY_DIRS "C:/DevelopmentEnvironment/OpenCV/cross-build/install/lib")

target_include_directories(untitled PUBLIC ${OpenCV_INCLUDE_DIRS})

target_link_libraries(untitled PUBLIC ${OpenCV_LIBS})

最后附上一张整体的流程图:

参考

CMake: (三) 交叉编译

https://www.cnblogs.com/flyinggod/p/13713646.html#cmake_system_name

Win10 环境下 Mingw-w64,CMake,CLion 安装及配置 C/C++ 和 OpenCV 运行环境

https://blog.csdn.net/u012005313/article/details/80215957

arm平台交叉编译opencv出现 undefined reference to `png_init_filter_functions_neon’

https://blog.csdn.net/BruceXSK/article/details/105860979
显示评论 (0)

文章评论

相关推荐

Yolov5_Seg输出解析

通过矩阵乘法(在代码中称为“matmul”)来计算分割掩码的原因,主要与实例分割网络(例如 YOLOv5 Segmentation)的实现方式有关。这种方法实际上是一种高效的特征图与目标分割系数组合的…

Ubuntu交叉编译Python

在 Ubuntu 上交叉编译 Python 的流程通常用于为不同平台生成可执行文件(如 ARM、MIPS 等)。以下是一般的操作步骤: 1. 安装必要的依赖工具 首先,确保已经安装了编译所需的工具和依…