1# libc标准库
2
3## 简介
4C标准函数库在C语言程序设计中,提供符合标准的头文件,以及常用的库函数实现(如I/O输入输出和字符串控制)。
5
6OpenHarmony采用musl作为C标准库,musl库是一个轻量,快速,简单,免费的开源libc库,详细介绍参考[musl官方参考手册](http://musl.libc.org/manual.html)7
8musl与glibc的差异点请参考[musl与glibc功能对比](https://wiki.musl-libc.org/functional-differences-from-glibc.html)9
10## 标准C库组件介绍
11
12[libc、libm、libdl](https://zh.cppreference.com/w/c/header)组合实现C11标准C库。
13
14libc:包含线程相关接口,以及大部分标准接口。
15
16libm:数学库函数接口,当前在OpenHarmony中是一个链接,实际都在libc中定义。
17
18libdl:dlopen等动态链接器接口,当前在OpenHarmony中是一个链接,实际都在libc中定义。
19
20## musl版本号
21
221.2.0
23
24从OpenHarmony4.0开始,版本升级到1.2.3
25
26从OpenHarmony5.0开始,版本升级到1.2.5
27
28## 支持的能力
29提供兼容C99,C11,POSIX标准的头文件,以及库函数接口,但不是完全兼容;支持armv7a,arm64, x86_64三种架构的支持;
30
31为了更好的适配OpenHarmony设备的高性能,低内存,高安全,轻量化,支持多种形态设备的基本特征;在musl开源库的基础上进行了优化,增强,对不适用嵌入式设备的接口进行了裁剪。
32
33### 新增能力
341. 动态加载器支持命名空间隔离能力,应用可以dlopen加载的动态库受系统命名空间限制(比如,无法打开系统侧动态库)。
352. 支持dlclose真实卸载动态库能力,musl的开源版本不支持。
363. 支持symbol-versioning功能。
374. dlopen支持直接加载zip包中未压缩的文件。
38
39### 调试能力
40libc提供了动态使能维测log功能(默认关闭),供开发者需要的时候查看libc库异常。使用libc提供的动态使能维测log功能,不需要重新编译libc库,只需设置param属性即可。在正式发布版本中,不建议使能,会影响运行性能。
41
42#### 1. musl.log功能
43设置musl.log.enable属性为true,打开musl维测log打印。打印其他日志,需先打开此开关。
44```
45param set musl.log.enable true
46```
47
48#### 2. 加载器log功能
49加载器是libc中负责程序引导,dlopen,dlclose等动态链接程序,如需要查看动态加载过程异常,可以打开加载器log。用法如下:
50* 使能全部应用的加载器log,log量比较大,请谨慎使用。
51```
52param set musl.log.ld.app true
53```
54* 使能指定应用的加载器log,{app_name}需要替换成真实需要打印log的应用名字。
55```
56param set musl.log.ld.all false
57param set musl.log.ld.app.{app_name} true
58```
59* 打印全部应用除指定名字应用外的加载器日志。
60```
61param set musl.log.ld.all true
62param set musl.log.ld.app.{app_name} false
63```
64## musl 差异规格接口说明
65
66| 接口名称          | 说明                                                                                         |
67|:--               |    :--                                                                                       |
68| epoll_create     | 在OpenHarmony5.0 上 该接口逻辑与1.2.3版本保持一致,不会对入参进行判断,不区分入参小于等于0的情况,预计下版本更新此接口逻辑与社区1.2.5保持一致,增加入参逻辑判断,入参小于等于0时创建失败,并返回错误码EINVAL。 |
69
70## ICONV支持的字符集编码格式
71
72musl支持的字符集编码格式,以及受支持的别名。
73> **注意**
74>
75> 在进行字符集编码格式转换时,请使用正确的源字符集编码格式,且目标字符集编码格式必须支持这些受转换的字符,否则转换失败。
76> 在musl里不支持将源字符集编码格式转换成这五种目标字符集编码格式:gb18030,gbk,gb2312,big5和euckr。
77
78| 编码格式 | 别名                   | musl支持情况|
79|:--      |    :--                   |  :--:  |
80|utf8     |                          |  支持   |
81|wchart   |                          |  支持   |
82|ucs2be   |                          |  支持   |
83|ucs2le   |                          |  支持   |
84|utf16be  |                          |  支持   |
85|utf16le  |                          |  支持   |
86|ucs4be   |utf32be                   |  支持   |
87|ucs4le   |utf32le                   |  支持   |
88|ascii    |usascii, iso646, iso646us |  支持   |
89|utf16    |                          |  支持   |
90|ucs4     |utf32                     |  支持   |
91|ucs2     |                          |  支持   |
92|eucjp    |                          |  支持   |
93|shiftjis |sjis, cp932               |  支持   |
94|iso2022jp|                          |  支持   |
95|gb18030  |                          |  支持   |
96|gbk      |                          |  支持   |
97|gb2312   |                          |  支持   |
98|big5     |bigfive, cp950, big5hkscs |  支持   |
99|euckr    |ksc5601, ksx1001, cp949   |  支持   |
100|iso88591 |latin1                    |  支持   |
101|iso88592 |                          |  支持   |
102|iso88593 |                          |  支持   |
103|iso88594 |                          |  支持   |
104|iso88595 |                          |  支持   |
105|iso88596 |                          |  支持   |
106|iso88597 |                          |  支持   |
107|iso88598 |                          |  支持   |
108|iso88599 |                          |  支持   |
109|iso885910|                          |  支持   |
110|iso885911|tis620                    |  支持   |
111|iso885913|                          |  支持   |
112|iso885914|                          |  支持   |
113|iso885915|latin9                    |  支持   |
114|iso885916|                          |  支持   |
115|cp1250   |windows1250               |  支持   |
116|cp1251   |windows1251               |  支持   |
117|cp1252   |windows1252               |  支持   |
118|cp1253   |windows1253               |  支持   |
119|cp1254   |windows1254               |  支持   |
120|cp1255   |windows1255               |  支持   |
121|cp1256   |windows1256               |  支持   |
122|cp1257   |windows1257               |  支持   |
123|cp1258   |windows1258               |  支持   |
124|koi8r    |                          |  支持   |
125|koi8u    |                          |  支持   |
126|cp437    |                          |  支持   |
127|cp850    |                          |  支持   |
128|cp866    |                          |  支持   |
129|cp1047   |ibm1047                   |  支持   |
130
131## musl不支持接口列表。
132
133[native api中没有导出的符号列表](musl-peculiar-symbol.md)
134
135[NDK musl-libc接口受权限影响的说明](guidance-on-ndk-libc-interfaces-affected-by-permissions.md)
136
137
138<!--no_check-->
139