Hi3516DV300 Cmake工程建立教程

  • 一、准备事项
  • 二、建立基本的Cmake工程
  • 三、提取SDK完善Cmake工程
  • 四、编译与调试
  • 五、总结

一、准备事项

1.以默认路径安装交叉编译器arm-himix200-linux.
2.解压SDK Hi3516CV500_SDK_V2.0.2.0.
3.板子运行程序前需加载好驱动。

二、建立基本的Cmake工程

如下图所示,建立基本的Cmake工程。
1.bin目录用于放编译生成的可执行文件。
2.build目录用于编译。
3.include目录用于放SDK的头文件。
4.lib目录用于放库文件。
5.src目录则用于放SDK的.c文件。
6.CMakeLists.txt为Cmake文件。

三、提取SDK完善Cmake工程

以编译sample vio为例完善Cmake工程。
1.添加头文件、库文件、以及common目录和sample/vio目录下的文件
注意:如果代码存在目录文件夹的,需要复制出来,include以及src目录下不放其他文件夹。
添加文件之后的Cmake工程如下图所示。

2.编写CMakeLists.txt文件
工程目录下的CMakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_PROCESSOR arm)
SET(TOOLCHAIN_DIR /opt/hisi-linux/x86-arm/arm-himix200-linux)
SET(CMAKE_C_COMPILER /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-gcc)
SET(CMAKE_CXX_COMPILER /opt/hisi-linux/x86-arm/arm-himix200-linux/bin/arm-himix200-linux-g++)
SET(CMAKE_FIND_ROOT_PATH  ${TOOLCHAIN_DIR}${TOOLCHAIN_DIR}/arm-himix200-linux/include${TOOLCHAIN_DIR}/arm-himix200-linux/lib )SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)PROJECT(Hi3516CV500_SDK_V2.0.2.0_MPP_Sample)
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ")
INCLUDE_DIRECTORIES(include)
add_subdirectory(src)

src目录下的CMakeLists.txt

aux_source_directory (. SRC_LIST)add_executable (EXEC_MPP_SAMPLE ${SRC_LIST})set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)LINK_DIRECTORIES(${PROJECT_SOURCE_DIR}/lib)target_link_libraries(EXEC_MPP_SAMPLE pthread dl m)

3.提取MPP编译参数
修改Hi3516CV500_SDK_V2.0.2.0/smp/a7_linux/mpp/sample/smp_linux.mak文件。
添加4个echo将sample的编译参数提取出来。

编译sample即可提取编译参数。

提取CFLAGS

提取编译的库链接顺序

4.使用编译参数完善CMakeLists.txt文件
给工程目录下的CMakeLists.txt添加CFLAGS。

给src目录下的CMakeLists.txt添加链接库。

四、编译与调试

进入build目录进行编译与调试Cmake工程。

cmake ..用于生成Makefile文件


生成Makefile之后在build目录进行编译。

报错找不到audio_aac_adp.h文件,将SDK audio/adp目录下的文件复制到Cmake工程include和src目录。
Hi3516CV500_SDK_V2.0.2.0/smp/a7_linux/mpp/sample/audio/adp

报错找不到VGS相关函数,修改库的链接顺序,将libmpi放到lib_hiawb之后。


报错找不到MP3的相关函数,删除MP3相关的文件audio_mp3_adp.c/audio_mp3_adp.h/mp3dec.h,根据audio目录下的可知,mp3相关的库需要从Android P的源码中拷贝,暂时不添加MP3的代码。

删除MP3相关的文件需要删除build目录下的文件,重新生成Makefile。

rm * -rf
cmake ..



报错找不到MP3的头文件和定义,则屏蔽相关代码。

编译成功,同时在bin目录下生成可执行文件EXEC_MPP_SAMPLE。

将EXEC_MPP_SAMPLE复制到板子上即可运行。

五、总结

本教程将SDK的MPP代码重新建立Cmake工程,可以脱离SDK单独进行开发,大大提高了开发便捷性。不过,本教程是基于sample vio建立的Cmake工程,编译其他sample时可能会出现报错,需要额外处理错误信息。后续可能会在此基础上添加FB相关功能,相关更新会在git代码进行。CSDN积分多的小伙伴可以点击下CSDN下载地址下载。

本教程git地址
本教程文件CSDN下载地址

Hi3516DV300 Cmake工程建立教程相关推荐

  1. Borland C++建立工程菜鸟教程

    实在不敢相信,学校里现在教学用的编译器还是七八十年代的老古董,难道这东西更能培养从没接触过代码的学生深刻理解c语言的运行流程,不得不说像VisualStdio这样的重量级开发环境确实屏蔽了很多底层的运 ...

  2. cmake的使用--从零建立一个小cmake工程

    A minimal project 代码仓库地址 https://github.com/zzu-andrew/linux-sys/tree/dfew/CMake # 说明最低cmake版本要求 cma ...

  3. 【STM32】【STM32CubeMX】STM32CubeMX的使用之一:工程建立之点亮你的LED

    文章目录 前言 1.工程建立 2.配置 2.1.写在前面 2.2.操作界面一览 2.1.引脚输出与配置 2.2.时钟配置 2.3.工程设置 2.3.1.Project 2.3.2.Code Gener ...

  4. 计算机网络拓扑分层,计算机网络和工程实践教程讲座主讲内容网络拓扑和分层体系结构.ppt...

    计算机网络和工程实践教程讲座主讲内容网络拓扑和分层体系结构.ppt 1. 物理层接口 物理层接口主要涉及各种传输介质或传输设备的接口.由于传输介质和传输设备种类很多,因此物理层接口的标准也非常多.下面 ...

  5. 初识CMake,如何编写一个CMake工程(上)

    如何编写一个CMake工程 笔者想分享CMake工程的原因? 1 接触CMake 1.1 认识CMake被广泛的使用? 1.2 了解CMake运行流程 1.3 Make和Makefile是什么关系? ...

  6. 初识CMake,如何编写一个CMake工程(下)

    如何编写一个CMake工程 上文分析了针对一个源文件.多个源文件.多个目录的情况 1 CMake自定义编译选项Demo4 1.1 效果展示 2 CMake安装(make install)与测试(mak ...

  7. keil软件基于AT89C52的基本工程建立及其相关设置

    Keil软件的工程建立与应用 1.首先我们双击打开Keil软件 2.建立新的文件 3.我们单击保存 4.创建相应的文件夹并将该文件放置该文件夹目录下更名为asm后缀文件,如下图所示 5.单击Keil工 ...

  8. Ubuntu下使用VS Code构建CMake工程

    1.下载Visual Studio Code 编译器 可以去Ubuntu自带的应用商店下载,或者使用你命令行下载 2.设置中文显示 直接下载的是英文版本,需要设置成中文显示 先去VS Code自带的商 ...

  9. 【UG二次开发环境建立教程】

    UG二次开发环境建立教程 关于UG二次开发环境的两种建立方法 方法一:导入UG二次开发向导模板 1.分别安装UG软件和Visual Studio软件,保证软件可以正常打开使用. 2.打开UG安装目录, ...

最新文章

  1. 利用COM+对数据库操作进行单元测试
  2. SSM中通过Json做前后端分离
  3. 再不用担心DataRow类型转换和空值了(使用扩展方法解决高频问题)
  4. 编译原理笔记 - 文法知识
  5. 小菜的CLR之旅(1)
  6. 短期目标[Till 2011-08-05]
  7. cobertura 使用_使用Cobertura,JUnit,HSQLDB,JPA涵盖您的测试
  8. 学用 TStringGrid [1] - ColCount、RowCount、Cells
  9. golang odbc mysql_go语言通过odbc操作Access数据库的方法
  10. 解决80端口被占用的情况
  11. 阿里字节面试题,多线程打印程序
  12. vfp 调用接口取数据_2分钟教你调用全国天气预报数据接口
  13. 通过DMVS采集并存储SQL Server性能计数器数据
  14. cryptojs des php,前端CryptoJS AES/DES加解密与后端PHP AES/DES加解密
  15. Java项目中使用OpenOffice转PDF
  16. 2022年湖南省中医执业医师考试第三单元医学针灸学模拟题
  17. Python爬虫:最牛逼的 selenium爬取方式!
  18. windows和linux共用蓝牙鼠标,双系统共用蓝牙键鼠(win10+macOS)
  19. java之缓存的使用
  20. python函数实验总结_Python程序设计实验报告:实验六 函数

热门文章

  1. 文件上传 服务器不响应headr,php 文件上传中服务器接收到$_FILES[xxx]['type'] 中的 type 原来是从 http header 里读取的,所以非常不可信...
  2. pip更新失败解决方法
  3. 浙江万里学院c语言题库答案,浙江万里学院单片机原理及应用模拟试卷八.doc
  4. 加权轮询算法(wrr),这个考点,概率有一点点高哦
  5. 交换路由报文的调度和队列图文详解: SP RR WRR WDRR
  6. NestJS 中,@ 符号是有什么含义
  7. OceanBase CTO杨传辉:下一代企业级分布式数据库的一体化设计
  8. excel取消密码_太神奇了!excel表格竟然可以设置查看密码
  9. css如何调整红心样式_jQuery CSS()方法改变CSS样式
  10. 新!uniapp微信小程序微信授权登录