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

相关推荐
小冷爱学习!25 分钟前
华为动态路由-OSPF-完全末梢区域
服务器·网络·华为
2501_904447741 小时前
华为发力中端,上半年nova14下半年nova15,大力普及原生鸿蒙
华为·智能手机·django·scikit-learn·pygame
MarkHD2 小时前
第十八天 WebView深度优化指南
华为·harmonyos
塞尔维亚大汉2 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【MIPI CSI】
harmonyos·领域驱动设计
别说我什么都不会3 小时前
鸿蒙轻内核M核源码分析系列十五 CPU使用率CPUP
操作系统·harmonyos
feiniao86514 小时前
2025年华为手机解锁BL的方法
华为·智能手机
塞尔维亚大汉4 小时前
OpenHarmony(鸿蒙南向)——平台驱动开发【I3C】
harmonyos·领域驱动设计
VVVVWeiYee5 小时前
BGP配置华为——路径优选验证
运维·网络·华为·信息与通信
今阳6 小时前
鸿蒙开发笔记-6-装饰器之@Require装饰器,@Reusable装饰器
android·app·harmonyos
余多多_zZ7 小时前
鸿蒙初学者学习手册(HarmonyOSNext_API14)_组件截图(@ohos.arkui.componentSnapshot (组件截图) )
学习·华为·harmonyos·鸿蒙·鸿蒙系统