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

相关推荐
sanzk30 分钟前
华为鸿蒙应用开发
华为·harmonyos
SoraLuna5 小时前
「Mac畅玩鸿蒙与硬件28」UI互动应用篇5 - 滑动选择器实现
macos·ui·harmonyos
ClkLog-开源埋点用户分析6 小时前
ClkLog企业版(CDP)预售开启,更有鸿蒙SDK前来助力
华为·开源·开源软件·harmonyos
mg6686 小时前
鸿蒙系统的优势 开发 环境搭建 开发小示例
华为·harmonyos
模拟IC攻城狮6 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
lqj_本人6 小时前
鸿蒙next选择 Flutter 开发跨平台应用的原因
flutter·华为·harmonyos
lqj_本人6 小时前
使用 Flutter 绘制一个棋盘
harmonyos
TangKenny7 小时前
计算网络信号
java·算法·华为
23zhgjx-NanKon7 小时前
华为eNSP:QinQ
网络·安全·华为
23zhgjx-NanKon7 小时前
华为eNSP:mux-vlan
网络·安全·华为