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

相关推荐
逢生博客3 小时前
Mac 搭建仓颉语言开发环境(Cangjie SDK)
macos·华为·鸿蒙
青柠_项目管理4 小时前
PMP证书持有者,在华为、腾讯一般能拿多少薪资?
华为·pmp
小强在此7 小时前
【基于开源鸿蒙(OpenHarmony)的智慧农业综合应用系统】
华为·开源·团队开发·智慧农业·harmonyos·开源鸿蒙
Reuuse9 小时前
【HCIA-Datacom】华为VRP系统
服务器·网络·华为
PlumCarefree10 小时前
基于鸿蒙API10的RTSP播放器(四:沉浸式播放窗口)
华为·harmonyos
中关村科金14 小时前
中关村科金推出得助音视频鸿蒙SDK,助力金融业务系统鸿蒙化提速
华为·音视频·harmonyos
繁依Fanyi14 小时前
828 华为云征文|华为 Flexus 云服务器部署 RustDesk Server,打造自己的远程桌面服务器
运维·服务器·开发语言·人工智能·pytorch·华为·华为云
小强在此17 小时前
基于OpenHarmony(开源鸿蒙)的智慧医疗综合应用系统
华为·开源·团队开发·健康医疗·harmonyos·开源鸿蒙
奔跑的露西ly1 天前
【鸿蒙 HarmonyOS NEXT】popup弹窗
华为·harmonyos