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

鸿蒙ndk

鸿蒙 NDK目录简介

1.1 ohos.toolchain.cmake

% pwd
~/Library/Huawei/Sdk/HarmonyOS-NEXT-DP2/base/native/build/cmake
% ls
ohos.toolchain.cmake		sdk_native_platforms.cmake

1.2 cmake

% cd  ../
% ls
cmake
% cd  ../
 % ls 
NOTICE.txt			build-tools			nativeapi_syscap_config.json	oh-uni-package.json
build				llvm				ndk_system_capability.json	sysroot
% cd  build-tools 
% ls
cmake
% cmake -version
cmake version 3.29.4
CMake suite maintained and supported by Kitware (kitware.com/cmake).
% pwd
~/Library/Huawei/Sdk/HarmonyOS-NEXT-DP2/base/native/build-tools

1.3 llvm

% pwd
~/Library/Huawei/Sdk/HarmonyOS-NEXT-DP2/base/native/build-tools
% ls
cmake
% cd  ../
% ls
NOTICE.txt			build-tools			nativeapi_syscap_config.json	oh-uni-package.json
build				llvm				ndk_system_capability.json	sysroot
% cd llvm 
% ls
NOTICE	bin	include	lib	libexec	python3	script	share
% cd bin 
% ls
FileCheck				git-clang-format			llvm-config				llvm-size
aarch64-unknown-linux-ohos-clang	ld.lld					llvm-cov				llvm-strings
aarch64-unknown-linux-ohos-clang++	ld64.lld				llvm-cxxfilt				llvm-strip
armv7-unknown-linux-ohos-clang		llc					llvm-dis				llvm-symbolizer
armv7-unknown-linux-ohos-clang++	lld					llvm-dwp				not
clang					lld-link				llvm-lib				opt
clang++					lldb					llvm-link				python
clang-15				lldb-argdumper				llvm-modextract				sancov
clang-check				lldb-mi					llvm-nm					sanstats
clang-cl				lldb-server				llvm-objcopy				scan-build
clang-cpp				lldb-vscode				llvm-objdump				scan-view
clang-format				lldb.sh					llvm-profdata				x86_64-unknown-linux-ohos-clang
clang-tidy				llvm-addr2line				llvm-ranlib				x86_64-unknown-linux-ohos-clang++
clangd					llvm-ar					llvm-rc					yaml2obj
count					llvm-as					llvm-readelf
dsymutil				llvm-cfi-verify				llvm-readobj

ohos.toolchain.cmake简介

ohos.toolchain.cmakeHarmonyOS NDK提供给CMaketoolchain脚本,里面预定义了编译HarmonyOS应用需要设置的编译参数,如交叉编译设备的目标、C++运行时库的链接方式等;这些参数在调用CMake命令时,可以从命令行传入,来改变默认编译链接行为。此文件中的常用参数见下表。

OHOS_STL
c++_shared/c++_static
libc++的链接方式。默认为c++_shared
c++_shared表示采用动态链接libc++_shared.soc++_static表示采用静态链接libc++_static.a
由于C++运行时中存在一些全局变量,因此同一应用中的全部Native库需要采用相同的链接方式。

OHOS_ARCH
armeabi-v7a/arm64-v8a/x86_64
设置当前Native交叉编译的目标架构,当前支持的架构为armeabi-v7a/arm64-v8a/x86_64

OHOS_PLATFORM
OHOS
选择平台。当前只支持HarmonyOS平台。
上述参数最终会控制Clang的交叉编译命令,产生合适的命令参数。

--target={arch}-linux-ohos参数,通知编译器生成相应架构下符合HarmonyOS ABI的二进制文件。

--sysroot={ndk_root}/sysroot参数,告知编译器HarmonyOS系统头文件的所在位置。

externalNativeOptions

模块级build-profile.json5externalNativeOptions参数是NDK工程C/C++文件编译配置的入口,可以通过path指定CMake脚本路径、arguments配置CMake参数、cppFlags配置C++编译器参数、abiFilters配置编译架构等。

"apiType": "stageMode",
"buildOption": {
  "arkOptions": {
   },
  "externalNativeOptions": {
    "path": "./src/main/cpp/CMakeLists.txt",
    "arguments": "",
    "cppFlags": "",
    "abiFilters": [
       "arm64-v8a",
       "armeabi-v7a",
       "x86_64"
    ],
  }
}

path string CMake构建脚本地址,即CMakeLists.txt文件地址。

abiFilters array本机的ABI编译环境,包括:

  • armeabi-v7a
  • arm64-v8a
  • x86_64
    如不配置该参数,编译时默认编译出arm64-v8a架构相关so

arguments string CMake编译参数。

cppFlags string C++编译器参数。

命令行构建项目

在很多复杂应用工程中,C++代码工程是通过CMake等构建系统以命令行方式来编译构建的,接下来介绍如何把已有的CMake工程切换到工具链中,从而使用命令行CMake构建该工程。

下载NDK开发包

DevEco StudioSDK Manager中下载。

解压NDK开发包

mac系统下使用 SDK包解压

tree ohos-sdk 
ohos-sdk
├── 20230824113825-L2-SDK-MAC-M1-FULL.tar.gz
└── sdk
    └── packages
        └── ohos-sdk
            └── darwin
                ├── ets-darwin-arm64-4.0.10.5-Release.zip
                ├── js-darwin-arm64-4.0.10.5-Release.zip
                ├── native-darwin-arm64-4.0.10.5-Release.zip
                ├── previewer-darwin-arm64-4.0.10.5-Release.zip
                └── toolchains-darwin-arm64-4.0.10.5-Release.zip

5 directories, 6 files

配置环境变量

配置mac系统下环境变量
# 在当前用户目录下
# 打开 .bash_profile 文件
# 文件如果不存在,创建即可
vim ~/.bash_profile
# 在文件最后添加 cmake 路径,该路径是自己的放置文件的路径,之后保存退出
export PATH=~/Ndk/mac-sdk-full/sdk/packages/ohos-sdk/darwin/native/build-tools/cmake/bin:$PATH
# 在命令行执行 source ~/.bash_profile 使环境变量生效
source ~/.bash_profile
#在命令行输入which命令查询当前CMake所在路径
which cmake
#结果路径与.bashrc中设置一致
~/ohos-sdk/ohos-sdk/linux/native/build-tools/cmake/bin/cmake

参考

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/build-with-ndk-cmake-0000001774120786


http://www.kler.cn/a/291596.html

相关文章:

  • golang开源框架:go开源验证框架validator
  • Java项目实战II基于Java+Spring Boot+MySQL的共享汽车管理系统(源码+数据库+文档)
  • DataStream编程模型之数据源、数据转换、数据输出
  • 【大语言模型】ACL2024论文-16 基于地图制图的罗马尼亚自然语言推理语料库的新型课程学习方法
  • 【springboot】启动原理
  • Jenkins下载安装、构建部署到linux远程启动运行
  • List 集合指定值升序降序排列Comparator实现
  • JVM系列(八) -运行期的几种优化技术
  • TikTok养号一般养几天?账号起步方法
  • 0.3 学习Stm32经历过的磨难
  • 深度学习系列69:tts技术原理
  • 使用matplotlab绘制多条形图
  • 四、材料与制造工艺 笔记
  • 微深节能 环冷机卸灰小车定位远程控制系统 格雷母线
  • 2024国赛数学建模评价类算法解析,2024国赛数学建模C题思路模型代码解析
  • UE4_后期处理_后期处理材质及后期处理体积二
  • Unity(2022.3.41LTS) - UI详细介绍- Button(按钮)TMP
  • 中间件解析漏洞
  • 【STM32+HAL库】---- 驱动MAX30102心率血氧传感器
  • “论面向服务架构设计及其应用”写作框架,软考高级论文写作,系统架构设计师
  • JVM类的加载和类的加载器
  • ssm“最多跑一次”微信小程序论文源码调试讲解
  • Springboot logback.xml配置 JdbcTemplate 打印日志
  • vue3实现打飞机(雷电)
  • 机床采集网关在汽车智能工厂中的应用及成效-天拓四方
  • JS 设计模式之发布订阅模式