Opencv(C++)学习 之RV1126平台的OPENCV交叉编译

本文详细描述了如何在Ubuntu18x64RV1126环境下,使用cmake-gui进行OpenCV4.7的交叉编译,包括遇到的常见错误、配置步骤和CMAKE_SYSTEM_PROCESSOR的重要性。作者强调了手动设置CMAKE_SYSTEM_PROCESSOR为arm以适应RV1126架构的过程。

本文特点:在线上资源中,已有诸多关于OpenCV移植至RV1106平台的文章分享。本文核心聚焦于使用cmake-gui进行编译时遭遇的各类报错现象,详细记录了解决这些编译错误的策略与步骤,并在此基础上对相关配置选项的关键知识点进行了简洁提炼和总结。

一、环境
ubuntu18 x64
RV1126交叉编译工具链
cmak v3.10
opencv4.7

二、编译方式概述: 采用 cmake-gui + Specify options for cross-compiling
尽管一些文章声称这种方法难以奏效,但实际上它完全可行。本节将直接呈现基于正确配置的完整流程概述,并在后续内容中列举出因缺失这些关键配置步骤而可能引发的各种错误示例,以供参考和对照。

三、编译过程:

1、下载opencv源码解压,安装并打开cmake.

2、修改Opencv中cmake/OpenCVDetectCXXCompiler.cmake 文件,在首行添加 set(CMAKE_SYSTEM_PROCESSOR “arm”) 语句(后文再讲为什么)
修改OpenCVDetectCXXCompiler.cmake
3、打开cmake-gui 按如下要求选项进行配置
在这里插入图片描述
在这里插入图片描述
Operating System / Version/Processor 这三者只有 VersIon需要定义,因为上文我们修改过OpenCVDetectCXXCompiler.cmake 所以 Processor 可选择性填写。

点击完成后 ,相关配置就改好了。再点击Generate之前,需要再配置下安装路径,也方便后面好取用库。
在这里插入图片描述

这里取消掉Test相关编译 ,Test耗时,我也用不到。
在这里插入图片描述
本文是C++,所以取消python和JAVA编译

在这里插入图片描述
在这里插入图片描述
4、再次点击Configure 完成后点击Generate
成功生成
在这里插入图片描述
.

四、编译测试
进入之前配置的 build_RV1126TEST 文件夹,直接make -j8
在这里插入图片描述
确认正常编译100%后,再make install
即可在之前配置的路径下找到打包好的头文件和库。
在这里插入图片描述
.
.
.
.
.
.

五、配置分析:
1、前文讲在cmake/OpenCVDetectCXXCompiler.cmake 文件,在首行添加 set(CMAKE_SYSTEM_PROCESSOR “arm”) 。这里我们先看下另一个文件的内容

/media/opencv/opencv-4.7.0/build_RV1126TEST/CMakeFiles/3.10.2/CMakeSystem.cmake

在这里插入图片描述
该CMake配置文件是由CMake图形用户界面(cmake-gui)工具自动生成的,其中上半部分详述了宿主机Ubuntu系统的相关属性信息,而下半部分则涉及目标平台RV1126的关键配置项。值得注意的是,在生成的配置中,CMAKE_SYSTEM_PROCESSOR变量未得到正确设定,其值为空,这一点与我们先前预期为RV1126架构进行的交叉编译配置有所出入。

由于CMAKE_SYSTEM_PROCESSOR这一核心变量未能识别出目标处理器架构,OpenCV在后续的编译阶段将无法针对性地进行适配配置,从而可能导致一系列与架构相关的编译错误发生。

因此,为确保OpenCV能够顺利无误地针对RV1126平台进行编译,我们在OpenCVDetectCXXCompiler.cmake文件中采取了手动干预措施,直接将CMAKE_SYSTEM_PROCESSOR变量明确赋值为“arm”——这是RV1126平台所采用的处理器架构。需要强调的是,对于不同平台而言,CMAKE_SYSTEM_PROCESSOR的定义应相应调整;OpenCV支持多种平台,并且在OpenCVDetectCXXCompiler.cmake中的相关判断区域内可以找到对不同架构的支持情况。通过这种方式修正后,后续的编译流程得以平稳推进并成功完成。

ps:若本文有幸获得读者关注,敬请不吝赐教。我将抽空进一步撰写关于OPENMP与TBB的联合编译过程及其在RV1126平台上实际测试效果的分析报告。

### RV1126 平台 OpenCV 与 Qt 结合的交叉编译方法 #### 准备工作 为了成功完成RV1126平台上的OpenCV与Qt结合的交叉编译,需准备如下环境: - Ubuntu 18.04 LTS (x64) - 安装有适当版本的CMake(建议至少为3.10) - 已经安装好适用于RV1126的目标板的交叉编译工具链 - 下载并准备好要使用的OpenCV源码包以及Qt库文件[^1] #### 配置 CMake 文件支持 Qt 和 OpenCV 的集成 对于希望将OpenCV功能嵌入到基于Qt的应用程序中的开发者来说,在`CMakeLists.txt`中正确设置模块路径至关重要。具体操作包括但不限于定义必要的变量来指向Qt和OpenCV的位置。 ```cmake set(OpenCV_DIR /path/to/opencv/build) # 设置OpenCV构建目录位置 find_package(OpenCV REQUIRED) if(NOT OpenCV_FOUND) message(FATAL_ERROR "Failed to find OpenCV") endif() include_directories(${OpenCV_INCLUDE_DIRS}) link_directories(${OpenCV_LIBRARY_DIRS}) add_executable(myapp main.cpp) target_link_libraries(myapp ${OpenCV_LIBS} Qt5::Widgets) ``` 上述代码片段展示了如何通过指定`OpenCV_DIR`让CMake找到之前已经交叉编译过的OpenCV库,并将其链接至项目之中;同时也指定了需要连接哪些Qt组件,这里以Widgets为例[^2]。 #### 修改 `arm-gnueabi.toolchain.cmake` 针对ARM架构下的特定需求调整toolchain文件也是必不可少的一环。这通常涉及到更新一些全局性的编译选项以便更好地适配目标硬件特性。 ```cmake SET(CMAKE_SYSTEM_NAME Linux) SET(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc) SET(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++) SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) ``` 这段脚本设定了用于编译C/C++代码的具体命令行工具名称,并告知CMake仅在指定根路径内查找依赖项,从而确保所有外部资源都来自预配置好的交叉编译环境中[^3]。 #### 编译过程概述 一旦完成了以上准备工作,则可以按照常规流程执行实际的编译任务了。先进入创建出来的build子目录,再运行相应的CMake指令启动整个工程的构建过程。 ```bash mkdir build && cd build cmake .. -DWITH_QT=ON \ -DBUILD_SHARED_LIBS=OFF \ -DCMAKE_BUILD_TYPE=Release make -j$(nproc) ``` 此段shell命令序列实现了对项目的初始化配置及多线程加速模式下的最终组装打包动作。特别注意的是启用了QT支持开关(`-DWITH_QT=ON`)并且选择了静态库形式进行输出(`-DBUILD_SHARED_LIBS=OFF`),这对于减少部署复杂度很有帮助.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

沉木渡香

感谢鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值