# libcæ ‡å‡†åº“ ## 简介 Cæ ‡å‡†å‡½æ•°åº“åœ¨Cè¯è¨€ç¨‹åºè®¾è®¡ä¸ï¼Œæä¾›ç¬¦åˆæ ‡å‡†çš„头文件,以åŠå¸¸ç”¨çš„库函数实现(如I/O输入输出和å—符串控制)。 OpenHarmony采用musl作为Cæ ‡å‡†åº“ï¼Œmusl库是一个轻é‡ï¼Œå¿«é€Ÿï¼Œç®€å•,å…费的开æºlibc库,详细介ç»å‚考[musl官方å‚考手册](http://musl.libc.org/manual.html)。 musl与glibc的差异点请å‚考[musl与glibc功能对比](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:数å¦åº“函数接å£ï¼Œå½“å‰åœ¨OpenHarmony䏿˜¯ä¸€ä¸ªé“¾æŽ¥ï¼Œå®žé™…都在libcä¸å®šä¹‰ã€‚ libdl:dlopenç‰åЍæ€é“¾æŽ¥å™¨æŽ¥å£ï¼Œå½“å‰åœ¨OpenHarmony䏿˜¯ä¸€ä¸ªé“¾æŽ¥ï¼Œå®žé™…都在libcä¸å®šä¹‰ã€‚ ## muslç‰ˆæœ¬å· 1.2.0 从OpenHarmony4.0开始,版本å‡çº§åˆ°1.2.3 从OpenHarmony5.0开始,版本å‡çº§åˆ°1.2.5 ## 支æŒçš„能力 æä¾›å…¼å®¹C99,C11,POSIXæ ‡å‡†çš„å¤´æ–‡ä»¶ï¼Œä»¥åŠåº“函数接å£ï¼Œä½†ä¸æ˜¯å®Œå…¨å…¼å®¹ï¼›æ”¯æŒarmv7a,arm64, x86_64ä¸‰ç§æž¶æž„的支æŒï¼› 为了更好的适é…OpenHarmony设备的高性能,低内å˜ï¼Œé«˜å®‰å…¨ï¼Œè½»é‡åŒ–,支æŒå¤šç§å½¢æ€è®¾å¤‡çš„基本特å¾ï¼›åœ¨muslå¼€æºåº“的基础上进行了优化,增强,对ä¸é€‚用嵌入å¼è®¾å¤‡çš„æŽ¥å£è¿›è¡Œäº†è£å‰ªã€‚ ### 新增能力 1. 动æ€åŠ è½½å™¨æ”¯æŒå‘½å空间隔离能力,应用å¯ä»¥dlopenåŠ è½½çš„åŠ¨æ€åº“å—系统命å空间é™åˆ¶ï¼ˆæ¯”å¦‚ï¼Œæ— æ³•æ‰“å¼€ç³»ç»Ÿä¾§åŠ¨æ€åº“)。 2. 支æŒdlclose真实å¸è½½åЍæ€åº“能力,musl的开æºç‰ˆæœ¬ä¸æ”¯æŒã€‚ 3. 支æŒsymbol-versioning功能。 4. dlopen支æŒç›´æŽ¥åŠ è½½zipåŒ…ä¸æœªåŽ‹ç¼©çš„æ–‡ä»¶ã€‚ ### 调试能力 libcæä¾›äº†åЍæ€ä½¿èƒ½ç»´æµ‹log功能(默认关é—),供开å‘者需è¦çš„æ—¶å€™æŸ¥çœ‹libc库异常。使用libcæä¾›çš„动æ€ä½¿èƒ½ç»´æµ‹log功能,ä¸éœ€è¦é‡æ–°ç¼–译libc库,åªéœ€è®¾ç½®param属性å³å¯ã€‚在æ£å¼å‘布版本ä¸ï¼Œä¸å»ºè®®ä½¿èƒ½ï¼Œä¼šå½±å“è¿è¡Œæ€§èƒ½ã€‚ #### 1. musl.log功能 设置musl.log.enable属性为true,打开musl维测log打å°ã€‚打å°å…¶ä»–日志,需先打开æ¤å¼€å…³ã€‚ ``` param set musl.log.enable true ``` #### 2. åŠ è½½å™¨log功能 åŠ è½½å™¨æ˜¯libcä¸è´Ÿè´£ç¨‹åºå¼•导,dlopen,dlcloseç‰åЍæ€é“¾æŽ¥ç¨‹åºï¼Œå¦‚éœ€è¦æŸ¥çœ‹åЍæ€åŠ è½½è¿‡ç¨‹å¼‚å¸¸ï¼Œå¯ä»¥æ‰“å¼€åŠ è½½å™¨log。用法如下: * ä½¿èƒ½å…¨éƒ¨åº”ç”¨çš„åŠ è½½å™¨log,log釿¯”较大,请谨慎使用。 ``` param set musl.log.ld.app true ``` * ä½¿èƒ½æŒ‡å®šåº”ç”¨çš„åŠ è½½å™¨log,{app_name}éœ€è¦æ›¿æ¢æˆçœŸå®žéœ€è¦æ‰“å°log的应用åå—。 ``` param set musl.log.ld.all false param set musl.log.ld.app.{app_name} true ``` * 打å°å…¨éƒ¨åº”用除指定åå—åº”ç”¨å¤–çš„åŠ è½½å™¨æ—¥å¿—ã€‚ ``` param set musl.log.ld.all true param set musl.log.ld.app.{app_name} false ``` ## musl å·®å¼‚è§„æ ¼æŽ¥å£è¯´æ˜Ž | 接å£åç§° | 说明 | |:-- | :-- | | epoll_create | 在OpenHarmony5.0 上 该接å£é€»è¾‘与1.2.3ç‰ˆæœ¬ä¿æŒä¸€è‡´ï¼Œä¸ä¼šå¯¹å…¥å‚进行判æ–,ä¸åŒºåˆ†å…¥å‚å°äºŽç‰äºŽ0çš„æƒ…å†µï¼Œé¢„è®¡ä¸‹ç‰ˆæœ¬æ›´æ–°æ¤æŽ¥å£é€»è¾‘与社区1.2.5ä¿æŒä¸€è‡´ï¼Œå¢žåŠ å…¥å‚逻辑判æ–,入å‚å°äºŽç‰äºŽ0时创建失败,并返回错误ç EINVAL。 | ## ICONV支æŒçš„å—ç¬¦é›†ç¼–ç æ ¼å¼ musl支æŒçš„å—ç¬¦é›†ç¼–ç æ ¼å¼ï¼Œä»¥åŠå—支æŒçš„别å。 > **注æ„** > > 在进行å—ç¬¦é›†ç¼–ç æ ¼å¼è½¬æ¢æ—¶ï¼Œè¯·ä½¿ç”¨æ£ç¡®çš„æºå—ç¬¦é›†ç¼–ç æ ¼å¼ï¼Œä¸”ç›®æ ‡å—ç¬¦é›†ç¼–ç æ ¼å¼å¿…须支æŒè¿™äº›å—转æ¢çš„å—符,å¦åˆ™è½¬æ¢å¤±è´¥ã€‚ > 在muslé‡Œä¸æ”¯æŒå°†æºå—ç¬¦é›†ç¼–ç æ ¼å¼è½¬æ¢æˆè¿™äº”ç§ç›®æ ‡å—ç¬¦é›†ç¼–ç æ ¼å¼ï¼šgb18030,gbk,gb2312,big5å’Œeuckr。 | ç¼–ç æ ¼å¼ | 别å | muslæ”¯æŒæƒ…况| |:-- | :-- | :--: | |utf8 | | æ”¯æŒ | |wchart | | æ”¯æŒ | |ucs2be | | æ”¯æŒ | |ucs2le | | æ”¯æŒ | |utf16be | | æ”¯æŒ | |utf16le | | æ”¯æŒ | |ucs4be |utf32be | æ”¯æŒ | |ucs4le |utf32le | æ”¯æŒ | |ascii |usascii, iso646, iso646us | æ”¯æŒ | |utf16 | | æ”¯æŒ | |ucs4 |utf32 | æ”¯æŒ | |ucs2 | | æ”¯æŒ | |eucjp | | æ”¯æŒ | |shiftjis |sjis, cp932 | æ”¯æŒ | |iso2022jp| | æ”¯æŒ | |gb18030 | | æ”¯æŒ | |gbk | | æ”¯æŒ | |gb2312 | | æ”¯æŒ | |big5 |bigfive, cp950, big5hkscs | æ”¯æŒ | |euckr |ksc5601, ksx1001, cp949 | æ”¯æŒ | |iso88591 |latin1 | æ”¯æŒ | |iso88592 | | æ”¯æŒ | |iso88593 | | æ”¯æŒ | |iso88594 | | æ”¯æŒ | |iso88595 | | æ”¯æŒ | |iso88596 | | æ”¯æŒ | |iso88597 | | æ”¯æŒ | |iso88598 | | æ”¯æŒ | |iso88599 | | æ”¯æŒ | |iso885910| | æ”¯æŒ | |iso885911|tis620 | æ”¯æŒ | |iso885913| | æ”¯æŒ | |iso885914| | æ”¯æŒ | |iso885915|latin9 | æ”¯æŒ | |iso885916| | æ”¯æŒ | |cp1250 |windows1250 | æ”¯æŒ | |cp1251 |windows1251 | æ”¯æŒ | |cp1252 |windows1252 | æ”¯æŒ | |cp1253 |windows1253 | æ”¯æŒ | |cp1254 |windows1254 | æ”¯æŒ | |cp1255 |windows1255 | æ”¯æŒ | |cp1256 |windows1256 | æ”¯æŒ | |cp1257 |windows1257 | æ”¯æŒ | |cp1258 |windows1258 | æ”¯æŒ | |koi8r | | æ”¯æŒ | |koi8u | | æ”¯æŒ | |cp437 | | æ”¯æŒ | |cp850 | | æ”¯æŒ | |cp866 | | æ”¯æŒ | |cp1047 |ibm1047 | æ”¯æŒ | ## musl䏿”¯æŒæŽ¥å£åˆ—表。 [native api䏿²¡æœ‰å¯¼å‡ºçš„符å·åˆ—表](musl-peculiar-symbol.md) [NDK musl-libc接å£å—æƒé™å½±å“的说明](guidance-on-ndk-libc-interfaces-affected-by-permissions.md) <!--no_check-->