• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# Musl libc
2
3musl,是MIT授权的针对Linux系统调用的API的标准C库实现,适用于广泛的部署环境。musl提供了高效的静态和动态链接支持, 为轻量级代码并且运行时开销低,在正确使用时具有强大的故障安全保证,以及标准一致性意义上的正确性和安全性。musl建立的原则是使用便于理解和维护的简单代码来实现目标。
4
5musl的1.1版本系列涵盖了所有在ISO C99和POSIX 2008基础中定义的接口,以及一些非标准的为了与Linux、BSD和glibc功能兼容的接口。
6
7## 目录结构
8
9```
10README_zh.md            #中文说明
11include					#musl头文件
12ldso					#动态链接器
13libc-test				#关于musl的测试用例
14ndk_musl_include		#生成ndk版本的头文件
15ndk_script				#生成ndk版本的脚本
16porting                 #linux liteos平台对musl适配文件
17src						#musl文件源
18scripts					#测试用脚本
19```
20
21## Openharmony对于musl的适配
22
23musl编译框架时编译,使用BUILD.gn进行配置编译。
24
25基于openharmony的需求,为musl新增的特性:
26
27-  加载器地址随机化,RELRO共享机制
28-  提供加载器namespace机制
29-  OHOS容器中能够运行依赖bionic的库
30-  musl全球化接口适配locale数据能力
31-  mallocng堆内存分配器安全增强,默认开启meta指针混淆。地址随机化通过MALLOC_SECURE_ALL宏开关。可在编译命令中增加--gn-args="musl_secure_level=3"开启
32
33等。在新增特性基础上,也进行了对于musl接口功能的完善与错误的修复。
34
35## ICONV支持的字符集编码格式
36
37musl支持的字符集编码格式,以及受支持的别名。
38> **注意**
39>
40> 在进行字符集编码格式转换时,请使用正确的源字符集编码格式,且目标字符集编码格式必须支持这些受转换的字符,否则转换失败。
41> 在musl里不支持将源字符集编码格式转换成这五种目标字符集编码格式:gb18030,gbk,gb2312,big5和euckr。
42
43| 编码格式 | 别名                   | musl支持情况|
44|:--      |    :--                   |  :--:  |
45|utf8     |                          |  支持   |
46|wchart   |                          |  支持   |
47|ucs2be   |                          |  支持   |
48|ucs2le   |                          |  支持   |
49|utf16be  |                          |  支持   |
50|utf16le  |                          |  支持   |
51|ucs4be   |utf32be                   |  支持   |
52|ucs4le   |utf32le                   |  支持   |
53|ascii    |usascii, iso646, iso646us |  支持   |
54|utf16    |                          |  支持   |
55|ucs4     |utf32                     |  支持   |
56|ucs2     |                          |  支持   |
57|eucjp    |                          |  支持   |
58|shiftjis |sjis, cp932               |  支持   |
59|iso2022jp|                          |  支持   |
60|gb18030  |                          |  支持   |
61|gbk      |                          |  支持   |
62|gb2312   |                          |  支持   |
63|big5     |bigfive, cp950, big5hkscs |  支持   |
64|euckr    |ksc5601, ksx1001, cp949   |  支持   |
65|iso88591 |latin1                    |  支持   |
66|iso88592 |                          |  支持   |
67|iso88593 |                          |  支持   |
68|iso88594 |                          |  支持   |
69|iso88595 |                          |  支持   |
70|iso88596 |                          |  支持   |
71|iso88597 |                          |  支持   |
72|iso88598 |                          |  支持   |
73|iso88599 |                          |  支持   |
74|iso885910|                          |  支持   |
75|iso885911|tis620                    |  支持   |
76|iso885913|                          |  支持   |
77|iso885914|                          |  支持   |
78|iso885915|latin9                    |  支持   |
79|iso885916|                          |  支持   |
80|cp1250   |windows1250               |  支持   |
81|cp1251   |windows1251               |  支持   |
82|cp1252   |windows1252               |  支持   |
83|cp1253   |windows1253               |  支持   |
84|cp1254   |windows1254               |  支持   |
85|cp1255   |windows1255               |  支持   |
86|cp1256   |windows1256               |  支持   |
87|cp1257   |windows1257               |  支持   |
88|cp1258   |windows1258               |  支持   |
89|koi8r    |                          |  支持   |
90|koi8u    |                          |  支持   |
91|cp437    |                          |  支持   |
92|cp850    |                          |  支持   |
93|cp866    |                          |  支持   |
94|cp1047   |ibm1047                   |  支持   |
95
96## locale数据能力支持的接口
97
98|                 函数                 |               用途              |         返回值        |        支持的字符集       |
99| :--------------------------------: | :---------------------------: | :----------------: | :-----------------: |
100| int isalnum\_l(int c, locale\_t l) | 根据locale设置判断字符是否是数字或字母(包括大小写) | 参数c是数字或字符返回1,否则返回0 | zh\_CN、zh\_CN.UTF-8 |
101|                                    |                               |                    |                     |
102
103## Musl使用文档
104
105有关完整musl目标编译器工具链、系统的信息bootstrapping和基于musl构建的Linux发行版可以在官方网站上找到:http://www.musl-libc.org/
106
107有关基本安装说明,请参阅附带的[INSTALL](https://gitee.com/openharmony/third_party_musl/blob/master/INSTALL)文件。
108
109musl参考手册:https://musl.libc.org/doc/1.1.24/manual.html