鸿蒙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

相关推荐
Random_index6 小时前
#Uniapp篇:支持纯血鸿蒙&发布&适配&UIUI
uni-app·harmonyos
鸿蒙自习室10 小时前
鸿蒙多线程开发——线程间数据通信对象02
ui·harmonyos·鸿蒙
SuperHeroWu712 小时前
【HarmonyOS】鸿蒙应用接入微博分享
华为·harmonyos·鸿蒙·微博·微博分享·微博sdk集成·sdk集成
期待未来的男孩12 小时前
华为FusionCube 500-8.2.0SPC100 实施部署文档
华为
岳不谢14 小时前
VPN技术-VPN简介学习笔记
网络·笔记·学习·华为
zhangjr057515 小时前
【HarmonyOS Next】鸿蒙实用装饰器一览(一)
前端·harmonyos·arkts
诗歌难吟46421 小时前
初识ArkUI
harmonyos
SameX21 小时前
HarmonyOS Next 设备安全特性深度剖析学习
harmonyos
郭梧悠1 天前
HarmonyOS(57) UI性能优化
ui·性能优化·harmonyos
郝晨妤1 天前
鸿蒙原生应用开发元服务 元服务是什么?和App的关系?(保姆级步骤)
android·ios·华为od·华为·华为云·harmonyos·鸿蒙