当前位置: 首页 > news >正文

RV1126 NO.34:OPENCV的交叉编译和项目Makefile讲解

一.OPENCV交叉编译的步骤

前言:在交叉编译之前需要把交叉编译工具链安装好,在我们Ubuntu里面它放在/opt目录里面,如下图:

交叉编译工具是:

/opt/rv1126_rv1109_linux_sdk_v1.8.0_20210224/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin

1.1 解压并且打开opencv目录

先用unzip opencv-3.4.16.zip来解压opencv的压缩包,并且打开opencv目录(cd opencv-3.4.16)如下图

1.2 修改opencv的cmake脚本的内容

cd platforms/linux然后修改arm-gnueabi.toolchain.cmake文件(vim arm-gnueabi.toolchain.cmake )如下图:

内容修改如下:

这里的修改关键是第二个,需要把RV1126的交叉编译工具链写上去

set(GNU_MACHINE "/opt/rv1126_rv1109_linux_sdk_v1.8.0_20210224/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf" CACHE STRING "GNU compiler triple")

1.3. 在opencv-3.4.16的目录建立build

在这个目录下使用mkdir build建立编译目录

1.4. 进入build目录进行cmake配置

在build目录下使用配置命令:

cmake -DCMKAE_BUILD_TYPE=Release -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/arm-gnueabi.toolchain.cmake -DCMAKE_INSTALL_PREFIX=/opt/arm_opencv_source -DSOFTFP=ON -DENABLE_PROFILING=OFF -DWITH_OPENCL=OFF -DWITH_TBB=ON -DWITH_V4L=ON -DHAVE_CAMV4L2=ON -DBUILD_TESTS=OFF -DINSTALL_PYTHON_EXAMPLES=OFF -DBUILD_EXAMPLES=OFF -DWITH_FFMPEG=ON -DHAVE_FFMPEG=ON -DBUILD_opencv_js=OFF -DENABLE_NEON=OFF -DENABLE_VFPV3=OFF ../

这里配置安装的目录是/opt/arm_opencv_source,若配置成功则会有以下打印:

1.5. 编译opencv的动态库

配置完成之后则先用用make进行编译(这里用make -j8),如下图:

当make成功的话,则会出现下面的图

1.6. 安装opencv的动态库

当编译完成之后,则需要使用make install安装动态库,如下图:

最终把动态库安装到/opt/arm_opencv_source里面,如下图:

bin:可执行文件文件

include:Opencv的头文件

lib:opencv的交叉编译动态库

share:一些共享的数据,通常无需关注

1.7. 把交叉编译的动态库拷贝到RV1126的板子里面

                                                                         (图1)

                                                                         (图二)

最后把Ubuntu交叉编译的动态库(图一)拷贝到板子的/usr/lib目录里面(图二),此时RV1126的板子就可以直接使用OPENCV功能了

二.Makefile的讲解

上图是Makefile的具体内容,后面OPENCV都是参照这个语法去进行编译。它的基本语法是:

$(G++) xxx.cpp $(CFLAGS) $(LIB_FILES) $(LIB_FLAGS) -o xxx

$(G++):RV1126的交叉编译工具链,这里是:

/opt/rv1126_rv1109_linux_sdk_v1.8.0_20210224/prebuilts/gcc/linux-x86/arm/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

$(CFLAGS):项目包含的头文件,最主要的包括rkmedia的头文件(-I./include/rkmedia) 、rknn的头文件(-I./rknn_rocx_include)、OPENCV的头文件(-I./arm_opencv_source/include), 其他的include没怎么用到。

$(LIBS_FILES): 项目包含的库目录,包括了RV1126的库(-L./rv1126_lib)、sqlite3的库(-L./sqlite3_source/lib)、opencv的动态库(-L./arm_opencv_source/lib)

$(LD_FLAGS):动态库的链接,这里包括了Opencv的链接(-lopencv_开头的库)、rkmedia的动态库链接(-ldrm、 -leasymedia、-lrockchip_mpp)等等。

-o:输出的可执行文件

http://www.dtcms.com/a/531819.html

相关文章:

  • FreeRTOS---进阶知识4---通用链表
  • jvm逃逸问题的分析以及给出解决方案?
  • PHP 表单:深入浅出地掌握表单处理
  • Linux(Ubuntu)操作系统下文件的解压
  • HTTP 1.0版本的webserver自主实现
  • 【开题答辩全过程】以 基于微信小程序的个性化饮品定制点餐系统设计与实现为例,包含答辩的问题和答案
  • kotlin - 显示heic图片
  • 做网站域名是什么意思网站不备案会怎样
  • A2A+MCP构建智能体协作生态:下一代分布式人工智能架构解析
  • SpringBoot 的三类配置文件
  • 创造模式物品栏——多物品栏
  • Docker中部署多个ASP.NET Core实例
  • HarmonyOS生物识别认证深度解析:从指纹到人脸的安全实践
  • GitHub等平台形成的开源文化正在重塑加热d
  • C++新特性概览
  • dify 配置 deepseek Credentials validation failed with status code 402
  • 【自然语言处理】Transformer模型
  • 使用 RapidXML 实现 C++ 中的 XML 文件读取与生成,特别适合需要快速处理 XML 的场景
  • 基于Reactor模式的高性能C++仿Muduo库:Server服务器模块实现
  • 常州市网站建设设计公众号开发和小程序开发哪个简单
  • 【Android】DrawerLayout实现侧边导航栏
  • 缓存查询逻辑及问题解决
  • 襄阳网站seo公司江津网站建设口碑
  • 【中望3D 2025】配置【vs2022】开发环境
  • 基于定制开发开源AI智能名片S2B2C商城小程序的全方位种草模式研究
  • 实现Callable接口(了解即可)
  • 从入门到实操:贝叶斯分析完整技术步骤与核心R包指南
  • 做理财的网站有哪些内容长春一般建一个网站需要多少钱
  • C#开发后端:API 控制器(Controller)
  • 建湖人才网招工湛江怎么做网站关键词优化