From e3af63704ecb39c4191d6c37b7fbe7d92496258e Mon Sep 17 00:00:00 2001 From: hhj Date: Thu, 1 Jun 2023 11:34:52 +0000 Subject: [PATCH] update zh-cn/application-dev/reference/native-api-intro.md. Signed-off-by: hhj --- .../reference/native-api-intro.md | 6 +- .../native-lib/third_party_libc/musl.md | 100 ++++++++++++------ 2 files changed, 70 insertions(+), 36 deletions(-) diff --git a/zh-cn/application-dev/reference/native-api-intro.md b/zh-cn/application-dev/reference/native-api-intro.md index a7b36a1786..ff3fcd572f 100644 --- a/zh-cn/application-dev/reference/native-api-intro.md +++ b/zh-cn/application-dev/reference/native-api-intro.md @@ -1,8 +1,8 @@ # Native API(NDK)入门 -Native API是OHOS SDK上提供的一组native开发接口与工具集合(也俗称为NDK),方便开发者使用C或者C++语言实现应用的关键功能。Native API只覆盖了OHOS基础的一些底层能力,如libc,图形库,窗口系统,多媒体,压缩库等,并没有完全提供类似于JS API上的完整的OHOS 平台能力。在应用中使用Native API会编译成动态库打包到应用中。 +Native API是OHOS SDK上提供的一组native开发接口与工具集合(也称为NDK),方便开发者使用C或者C++语言实现应用的关键功能。Native API只覆盖了OHOS基础的一些底层能力,如libc,图形库,窗口系统,多媒体,压缩库等,并没有完全提供类似于JS API上的完整的OHOS 平台能力。在应用中使用Native API会编译成动态库打包到应用中。 -## 名词解释 +## 名词概念 |名词|名词解释| |--|--| |Native API|OHOS SDK里面native包提供的,面向三方应用开发的Native 接口以及相应编译脚本,编译工具链。包括C运行时基础库libc,3D图形库opengl,面向JS与C跨语言的接口Node-API等,具体内容详见下表。| @@ -45,7 +45,7 @@ Native API在SDK包的位置为$(SDK_ROOT)/native目录,主要有以下几个 ### Native API相关资料 * 《[Native API参考手册](./native-apis/Readme-CN.md)》,介绍各个API参考手册 -* 《[Native API中支持的标准库](../reference/native-lib/third_party_libc/musl.md)》,介绍Native API支持的开源标准库 +* 《[Native API中支持的标准库](../reference/native-lib/Readme-CN.md)》,介绍Native API支持的开源标准库 * 《[Native API开发指南](../napi/Readme-CN.md)》,结合具体的例子,场景介绍各类接口的使用 * 《[使用NDK编译一个Cmake C/C++工程文档](../quick-start/howto-migrate-cmake-with-ohosndk.md)》,介绍如何使用使用Native API开发一个Cmake工程 * 《[Node-API在应用工程中的使用指导](../napi/napi-guidelines.md)》, 如何使用Node-API接口 diff --git a/zh-cn/application-dev/reference/native-lib/third_party_libc/musl.md b/zh-cn/application-dev/reference/native-lib/third_party_libc/musl.md index c49d5e8b92..d92efd9450 100644 --- a/zh-cn/application-dev/reference/native-lib/third_party_libc/musl.md +++ b/zh-cn/application-dev/reference/native-lib/third_party_libc/musl.md @@ -1,34 +1,68 @@ -# Native API中支持的标准库 - -## 简介 -OHOS采用musl作为C标准库,musl库是一个轻量,快速,简单,免费的开源库。 - - -## 标准C库 - -[libc、libm、libdl](https://zh.cppreference.com/w/c/header)组合实现C11标准C库。 - -libc:包含线程相关接口,以及大部分标准接口。 - -libm:数学库函数接口,当前在OHOS中是一个链接,实际都在libc中定义。 - -libdl:dlopen等动态链接器接口,当前在OHOS中是一个链接,实际都在libc中定义。 - -**版本** - -1.2.0 - -从OHOS4.0开始,版本升级到1.2.3 - -**支持的能力** - -C标准函数库是在C语言程序设计中,所有符合标准的头文件的集合,以及常用的函数库实现程序(如I/O输入输出和字符串控制)。 - -**musl** - -[native api中没有导出的符号列表](musl-peculiar-symbol.md) - -[native api由于权限管控可能调用失败的符号列表](musl-permission-control-symbol.md) - - +# libc标准库 + +## 简介 +C标准函数库在C语言程序设计中,提供符合标准的头文件,以及常用的库函数实现(如I/O输入输出和字符串控制)。 + +OHOS采用musl作为C标准库,musl库是一个轻量,快速,简单,免费的开源libc库,详细介绍参考[musl官方参考手册](http://musl.libc.org/manual.html)。 + +musl与glibc的差异点请参考[wiki](https://wiki.musl-libc.org/functional-differences-from-glibc.html)。 + +## 标准C库组件介绍 + +[libc、libm、libdl](https://zh.cppreference.com/w/c/header)组合实现C11标准C库。 + +libc:包含线程相关接口,以及大部分标准接口。 + +libm:数学库函数接口,当前在OHOS中是一个链接,实际都在libc中定义。 + +libdl:dlopen等动态链接器接口,当前在OHOS中是一个链接,实际都在libc中定义。 + +## musl版本号 + +1.2.0 + +从OHOS4.0开始,版本升级到1.2.3 + +## 支持的能力 +提供兼容C99,C11,POSIX标准的头文件,以及库函数接口,但不是完全兼容;支持armv7a,arm64, x86_64三种架构的支持; + +为了更好的适配OHOS设备的高性能,低内存,高安全,轻量化,支持多种形态设备的基本特征;在musl开源库的基础上进行了优化,增强,对不适用嵌入式设备的接口进行了裁剪。 + +### 新增能力 +1. 动态加载器支持命名空间隔离能力,应用可以dlopen加载的动态库受系统命名空间限制(比如,无法打开系统侧动态库)。 +2. 支持dlclose真实卸载动态库能力,musl的开源版本不支持。 +3. 支持symbol-versioning功能。 +4. dlopen支持直接加载zip包中未压缩的文件。 + +### 维测能力 +提供了基础的log调试能力,方便开发者需要查看libc库内部异常。维测log的提供动态开关功能,不需要重新编译。在正式发布版本中,不建议使用,会影响运行性能。 + +#### 1. musl.log功能 +通过hdc shell设置musl.log.enable属性为true来打开musl的log打印。这个接口是libc库里面别的日志的基础。 +``` +setparam musl.log.enable true +``` + +#### 2. 加载器log功能 +如果需要程序引导,dlopen,dlclose等接口的日志,需要打开加载器log;这些log通过musl.log.ld.* param来设置。 +* 使能全部应用的加载器log,谨慎使用 +``` +setparam musl.log.ld.app true +``` +* 使能指定应用的加载器log,{app_name}需要替换成真实需要打印log的应用名字 +``` +setparam musl.log.ld.all false +setparam musl.log.ld.app.{app_name} true +``` +* 打印全部应用除指定名字应用外的加载器日志 +``` +setparam musl.log.ld.all true +setparam musl.log.ld.app.{app_name} false +``` + +## musl不支持接口列表 +[native api中没有导出的符号列表](musl-peculiar-symbol.md) +[native api由于权限管控可能调用失败的符号列表](musl-permission-control-symbol.md) + + \ No newline at end of file -- GitLab