# @ai-ecoverse/wasm-emscripten 中文文档

规范地址：https://npmcn.com/package/%40ai-ecoverse/wasm-emscripten/

版本：6\.0\.9-31
npm 元数据更新时间：2026-10-22T21:25:32.698Z
中文译文更新时间：2026-11-06T06:44:02.543Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40ai-ecoverse/wasm-emscripten
原文对照：https://npmcn.com/package/%40ai-ecoverse/wasm-emscripten/?lang=original
项目主页：https://github.com/ai-ecoverse/homescoop/tree/main/packages/wasm-emscripten
源码仓库：https://github.com/ai-ecoverse/homescoop

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：48.8 MB，6873 个文件
- TypeScript 类型：未声明
- 运行依赖：8 个
- 首次发布：2026-10-01T00:35:22.496Z
- 最新版本发布：2026-10-22T21:25:32.291Z
- 近 30 天下载量：4399（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：29（近 12 个月 29 个）

## 中文简介

C和C++到WebAssembly 编译器(emcc),运行在等效平通上.

## 安装

```sh
npm install @ai-ecoverse/wasm-emscripten
```

也可以使用：`pnpm add @ai-ecoverse/wasm-emscripten`、`yarn add @ai-ecoverse/wasm-emscripten`、`bun add @ai-ecoverse/wasm-emscripten`

## README

# @ai-ecoverse/wasm-emscripten (英语)

标记 **6.0.9-基特语** 对SLICC的原地。 启动器运行 `emcc.py` (和朋友们) `@ai-ecoverse/wasix-python` (单位:千美元)`python3 -S`与 `EM_CONFIG` 指向这个包的配置 .

> **emcc 尚未运行于 slic- 内核** (通过路径执行胶水,没有) `node`,参见 [块状内核# 390](https://github.com/ai-ecoverse/slicc-kernel/issues/390)。 。 。 . 从6.0.9-18起,同伴就在这个包裹(npm, slic's)旁边找到 `ipk add -g`, pnpm 虚拟存储器) 而不是仅放在下面 `/shared/lib/node_modules`。 。 。 .

## 伴侣

| 软件包 | 作用 |
| --- | --- |
| `@ai-ecoverse/wasix-python` | 运行的活字 `em*.py` |
| `@ai-ecoverse/wasm-clang` | `LLVM_ROOT` (clang/ wasm-ld) (英语) |
| `@ai-ecoverse/wasm-binaryen` | `BINARYEN_ROOT` (wam -opt, ... ) (wasm -opt, ...) (wasm |
| `@ai-ecoverse/emscripten-cache` | 只读预建 `sysroot/` |
| `esbuild-wasm@0.28.2` | 系统 `node` 无害环境管理/过渡法`compiler.mjs`, (...) (中文(简体) ) |
| `typescript@6.0.3` | 无法重建时的倒转路径 |
| `acorn` 编号 : `acorn-import-phases` | JS 优化器`acorn-optimizer.mjs`(中文(简体) ) |

## 默认链接( wasm 域)

可执行链接( 不) `-c` 编号 : `-r` 编号 : `-shared`) 注射 `homescoop_em_cli_ldflags` (单位:千美元)`-sENVIRONMENT=web,worker,node -sEXIT_RUNTIME=1 -sALLOW_MEMORY_GROWTH=1 -sFORCE_FILESYSTEM=1`和 `lib/slicc/{slicc_spawn,slicc_exec,slicc_signals,slicc_select,slicc_libc_gaps,slicc_jobs}.o` 和档案 `lib/slicc/libslicc_signals.a` (单位:千美元)`kill`, (中文(简体) ), `lib/slicc/libslicc_select.a` (单位:千美元)`poll`, (中文(简体) ), `pselect`, (中文(简体) ), `lib/slicc/libslicc_libc_gaps.a` (单位:千美元)`nanosleep` 第8条 `set*id`, (中文(简体) ), `lib/slicc/libslicc_jobs.a` (单位:千美元)`tcgetpgrp`, (中文(简体) ), `tcsetpgrp`和 `lib/slicc/libslicc_realpath.a`, (中文(简体) ), 与联合来文图书馆合作 `lib/slicc/{slicc-writev,slicc-linkat,slicc-uname,slicc-env}.js`。 。 。 . `slicc-env.js` (自6.0.9-27起)只给程序环境 内核通过:没有Emscripten的占位符(`USER`编号 :`LOGNAME=web_user`, (中文(简体) ), `HOME=/home/web_user`, (中文(简体) ), `PATH=/`, (中文(简体) ), `PWD=/`),所以在 `env -i` 它们是未设置的. 选择退出 **`SLICC_EMCC_PLAIN=1`** 纯网络胶水.

`-sMAIN_MODULE=1` 财务报告和审定财务报表 `-sLINKABLE=1` 链接(自6.0.9-30起,housecoop#1678起) 将每个输入包入 `--whole-archive`,所以所有 `libc.a` 链接,以及 一个 libc 函数的每个 slic 覆盖将是一个重复的符号 。 这些 链接 `lib/slicc/linkable/*.o` 相反: 编译相同的6个对象 与 `-fPIC` (一个主要单元需要它) `kill`, (中文(简体) ), `poll`, (中文(简体) ), `pselect`, (中文(简体) ), `nanosleep`, (中文(简体) ), `setuid`, (中文(简体) ), `setgid`, (中文(简体) ), `seteuid`, (中文(简体) ), `setegid`, (中文(简体) ), `setreuid`, (中文(简体) ), `setregid`, (中文(简体) ), `setresuid`, (中文(简体) ), `setresgid`, (中文(简体) ), `tcgetpgrp` 财务报告和审定财务报表 `tcsetpgrp` 已更名 输出( o)`-D<name>=slicc_linkable_<name>`所以shim自己的电话在.. 对象仍然达到其版本),没有覆盖档案。 这些链接 获取 libc 版本的这些函数和 musl 版本 `realpath` (单位:千美元)`ELOOP` 40岁 符号链接如下: 没有内核信号通过 `kill`,无内核 `poll`, (中文(简体) ), `pselect` 或全权证书,以及 `tcgetpgrp`编号 :`tcsetpgrp` 回答 0 和 `EINVAL` 在终端。 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}其他的 都默认了 {\\fn黑体\\fs22\\bord1\\shad0\\3aHBE\\4aH00\\fscx67\\fscy66\\2cHFFFFFF\\3cH808080}, 信号口罩和 `raise`环境 内核的过程 (小组和会议). `-sMAIN_MODULE=2` 财务报告和审定财务报表 `-sSIDE_MODULE` 没有 受到影响:像任何可执行文件一样,第一个链接,第二个链接没有被切片 默认值。 每个 `-sMAIN_MODULE` 链接需要 `-fPIC` 系统库 `sysroot/lib/wasm32-emscripten/pic`; 标记缓存 他们从6.0.9-7(homescoop#1699)出发,所以这些链接不需要建造 并使用只读的全局安装。 上面写着 6个 埃姆克试图把它们建入包里 失败 `PermissionError`。 。 。 . `lib/slicc` 由homecoop所编译出 :`shims/slicc`, (中文(简体) ), 阿帕奇-2.0; (英语); `THIRD-PARTY-NOTICES.md` 持有许可证. `lib/slicc/slicc_main_envp.o` (制作: `-Dmain=slicc_tool_main`和 `lib/slicc/slicc_fork.o` + 键 `lib/slicc/slicc-fork.js` (需要ASYNCIFY)为: 已运出但没有自动链接 。 叉选入 :

```bash
emcc … $SLICC_EM_LIBDIR/slicc_fork.o \
  --js-library $SLICC_EM_LIBDIR/slicc-fork.js \
  -sASYNCIFY -sASYNCIFY_STACK_SIZE=1048576 \
  -sEXPORTED_RUNTIME_METHODS=FS,ENV,callMain,sliccRunMain,sliccForkChild
```

根号 `$PKG/emcc` (制作工具链)和 `$PKG/bin/emcc` 是同样的自给自足的发射装置.

## CACHE 模式

-   **`EM_CACHE`** =: `$XDG_CACHE_HOME/emscripten` 或者说 `~/.cache/emscripten` (可写,用户自有)
-   在第一次使用时, `bin/em-ensure-cache` 创建 `$EM_CACHE/sysroot` 作为 **符号链接** 输入 `@ai-ecoverse/emscripten-cache/sysroot` —— 说 **无100MB 副本**
-   还复制了 `stamps/sysroot_install.stamp` 作为 **真文件** 输入 `$EM_CACHE` 因此, emcc 永远不再通过符号链接重新安装信头
-   `js_output/` 财务报告和审定财务报表 `symbol_lists/` 在用户目录中温暖(活性) `ipk` 重新安装)
-   `FROZEN_CACHE = False` 所以温暖的缓存工作; `--clear-cache` 跳过相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通相通
-   覆盖 `EM_CACHE` 必要时

## SLIC 补丁( 9月 + homecoop)

1.  **Wasm- realm CLI 链接默认** - 见上文;可选 `SLICC_VFS_PRE_JS` 仅在设定时( 节点- realm)
2.  **配置补丁** 自动配置/ 配置测试跳过 `NODERAWFS` cLI 默认值
3.  **`ac_cv_build` 播种** —— 说 `emconfigure` 套装 `ac_cv_build=x86_64-pc-linux-gnu` (和东道/目标) `config.guess` 不需要真实
4.  **不支持的关闭** —— 说 `-sCLOSURE=1` 编号 : `--closure` 以失败方式 : _关闭编译器在 SLICC 的 Emscripten 包中没有_
5.  **缓存去除** —— 将不会删除一个已链接的对称 `sysroot`
6.  **`execvpe`** —— 说 `tools/utils.py` 通过 `os.environ` 这样配置/`emmake` 保留 `CC=emcc`

### 仅包补丁( E)`package-patches/`,自6.0.9-27起

在共享之上 `patches/` (哪个) `scripts/emscripten-tree.sh` (单位:千美元) 申请标注cache、llvm-emscripten、hem-clang、hem-binaryen和 这个包裹 5个补丁 `package-patches/` 一个来自 `package-patches/libc/`它们被保存 调出 `patches/` 所以他们不会改变那些包的胶水 未经本人释放:

-   **0014, 符号链接绑定** (homescoop#611): (英语) `FS.lookupPath` 允许 40 和Linux一样,符号链接随之而来,41是 `ELOOP`在它之前,一条道路 总共40个 `ELOOP` 中.
    
-   **0015, (英语), `slicc-env.js` 在默认链接中** (homescoop#1531),作为 `homescoop_em_cli_ldflags` 拥有它.
    
-   **0016 (英语), `libslicc_realpath.a` 在默认链接中** (homescoop#1631) (英语), #1664:默认链接已添加 `lib/slicc/libslicc_realpath.a`,一个归档 其一员, `slicc_realpath.o`这是musl的 `realpath.c` 带自由字 补丁 0017,用libc的旗帜来编译. 这是在节目之后 输入和之前 `libc.a`,所以链接器只有在 `realpath` 还没有定义,然后 `libc.a`属于自己的 `realpath` 成员从不 拉入; 标记卡切的预建 `libc.a` 保持原样 一个程序 定义它自己的 `realpath` (在其来源、对象或档案中) 或者说 `-l` 与6.0.9-28之前一样, 6.0.9-28 (简体中文) 已添加 `slicc_realpath.o` 作为普通物体,它总是联系在一起,所以 一个程序得到了 `duplicate symbol: realpath` (# 1664) (中文(简体) ). `SLICC_EMCC_PLAIN=1` 链接跳过 档案,并获得musl的束缚.
    
-   **0018, 关闭档案和 `-sMAIN_MODULE=1`** (homescoop#1678): (英语) 默认链接添加 `lib/slicc/libslicc_jobs.a` 旁边 `libslicc_realpath.a`,用于 `-sMAIN_MODULE=1` 财务报告和审定财务报表 `-sLINKABLE` 链接 带 `lib/slicc/linkable/<obj>` 用于每个默认对象并同时离开 档案出炉. `slicc_jobs.o` 编译为 `tcgetpgrp` 财务报告和审定财务报表 `tcsetpgrp` 重新命名后退出; `libslicc_jobs.a` 每节都有一个成员, `slicc_tcgetpgrp.o` 财务报告和审定财务报表 `slicc_tcsetpgrp.o`,每个 `slicc_jobs.c` 与 每个其他全局重命名,所以链接器只拉出每个,而其 符号未定义,而程序本身 `tcsetpgrp` 赢了 免费的 `tcsetpgrp` 还不够,它通过标注 `TIOCSPGRP` ioctl,这是 `EINVAL` 在每一个终端上,永远不要到达内核. 如果成员定义了全局性对象, build.sh 失败 定义,或如果 `linkable` 对象仍然定义 libc 中的一个.
    
-   **0019,其他的档案** (homescoop#1724):默认链接 还添加 `lib/slicc/libslicc_signals.a`, (中文(简体) ), `libslicc_select.a` 财务报告和审定财务报表 `libslicc_libc_gaps.a`。 。 。 . `slicc_signals.o`, (中文(简体) ), `slicc_select.o` 财务报告和审定财务报表 `slicc_libc_gaps.o` 以它们覆盖的12个 libc 函数编译 已更名 `<object>_<name>` (单位:千美元)`slicc_signals_kill`, (中文(简体) ), `slicc_select_poll`, (中文(简体) ), `slicc_libc_gaps_setuid`每个档案员, `slicc_<name>.o`,是一个 单行函数 `<name>` 这叫重新命名的定义,所以 链接器仅在程序离开时拉出一个成员 `<name>` 未定义, 和定义自己的程序 `kill`, (中文(简体) ), `poll`, (中文(简体) ), `pselect`, (中文(简体) ), `nanosleep` 或者说 `set*id` 链接和运行自己的; 直至6.0.9-30 12 在总是相连的对象中是强烈的定义,所以它得到了 `duplicate symbol`。成员只依靠始终相连的物体, 从来没有彼此,所以一个程序自己的 `poll` 留下残片 `pselect` 已经就位。 他们自己的电话`slicc_exec.o` 电话 `kill`(中文(简体) ) 通过符号,所以当程序有 。如果普通对象仍然定义了覆盖,或 成员定义除了自己的符号以外的任何东西.
    
-   **libc/0017, 穆斯尔的正轨约束** (homescoop#1631): 穆斯尔停止在 `++cnt == SYMLOOP_MAX`这样 `realpath()` 一条完全40个共鸣的路径 以下为 `ELOOP` 即使是在0014 固定之后 `open()` 财务报告和审定财务报表 `stat()`0017 创造 这个 `cnt++ == SYMLOOP_MAX`:40跟随决心,41是 `ELOOP`,作为 (原始内容存档于2019-09-21). in glibc.
    

build.sh将0014-0016、0018和0019适用于所运出树木及其连接的树木 准备节目. `package-patches/libc/` 适用于已发运的 只有树,所以PRESTAGE主机树在上游构造相同 `libc.a` 那个 (c) 然后检查40分的开放、静态和真人状态 和41个有默认链条的接踵而来 没有 `libslicc_realpath.a` 现实仍然如此 `ELOOP` 在40岁时, 和汉姆・克朗, 汉姆・比那利安和克麦接他们 他们自己的下次发布, 或者后来的一波折叠到 `patches/`。 。 。 .

自6.0.9-29起,PRESTAGE还链接了定义自己的程序 `realpath`:在程序的源,在后期对象,在存档和 结束 `-l`。每个链接必须连接默认链接并运行自己的链接 `realpath`还检查了6.0.9-28的形状, `slicc_realpath.o` 作为普通对象 除了一个程序自己的 `realpath`,仍然给 `duplicate symbol: realpath` (homescoop#1664) (英语).

自6.0.9-30 预告链接 `jobs.c` (真实的,不相同的, `tcgetpgrp(0)` 财务报告和审定财务报表 `tcsetpgrp(0, getpid())`)带有默认链接(`tcgetpgrp self tcsetpgrp 0 ok`; 无 `libslicc_jobs.a` 这是利布克的 `0` 财务报告和审定财务报表 `EINVAL`),与 `-sMAIN_MODULE=1` 并带有 `-sLINKABLE=1`,然后各运行;最后两个必须 回答 libc 语句 `0` 财务报告和审定财务报表 `EINVAL` 和导出 `slicc_linkable_kill`,该 默认链接的原型不能有 。 连接 `own-tc.c`,定义其 拥有 `tcsetpgrp`,并运行自己的。 6.0.9-29级 `lib/slicc` (单位:千美元)`slicc_jobs.o` 兼有两处覆盖,没有 `linkable/`)必须给予 `duplicate symbol: tcsetpgrp` 页:1 `own-tc.c` 和失败 `-sMAIN_MODULE=1` 财务报告和审定财务报表 `-sLINKABLE=1` 链接 (homescoop#1678) (英语).

自6.0.9-31 预告链接 `own-libc.c`,它要求所有12个 `kill`, (中文(简体) ), `poll`, (中文(简体) ), `pselect`, (中文(简体) ), `nanosleep` 第8条 `set*id`,带有 `--pre-js` 立体内核,并打印每个字,无论是块块、块块块或块块 程序自己的版本已回答。 默认链接必须打印 `slicc` 页:1 全部12个(和 `libc` 在没有三个档案的12人中。 定义任何 其中之一在程序的来源,或 `poll` 财务报告和审定财务报表 `nanosleep` 它本身 `-l` 归档,必须链接和打印 `own` 这些和 `slicc` 剩下的钱. 以 6.0.9-30 的平地物体 12 个给予 `duplicate symbol: <name>` (homescoop#1724) (中文(简体) ). `priv.c` 检查特权下降是否真的发生:作为根,带有 持有证书的内核, `setgid(5)`, (中文(简体) ), `setresuid(6, 0, 6)` 财务报告和审定财务报表 `setuid(5)` 必须改变什么 `getgid`, (中文(简体) ), `getresuid`, (中文(简体) ), `getuid` 财务报告和审定财务报表 `geteuid` 报告。 无 `libslicc_libc_gaps.a`, libc 的根根返回 - 1 并留下每张id在0, 所以行失败.

## 图标

`emcc`, (中文(简体) ), `em++`, (中文(简体) ), `emar`, (中文(简体) ), `emranlib`, (中文(简体) ), `emcmake`, (中文(简体) ), `emconfigure`, (中文(简体) ), `emmake`, (中文(简体) ), `embuilder`, (中文(简体) ), `em-config`, (中文(简体) ), `emscan-deps`

```bash
emcc hello.c -o hello.js    # runnable in the wasm realm
emcmake cmake -S . -B build
emconfigure ./configure --host=wasm32-unknown-emscripten
```

## 常见问题

### @ai-ecoverse/wasm-emscripten 是什么？

C和C\+\+到WebAssembly 编译器\(emcc\),运行在等效平通上\.

### 如何安装 @ai-ecoverse/wasm-emscripten？

在项目目录运行 npm install @ai-ecoverse/wasm-emscripten，或使用 pnpm add / yarn add / bun add。

### @ai-ecoverse/wasm-emscripten 支持 TypeScript 吗？

该包的 package\.json 没有声明类型入口。需要类型提示时，可以在 npm 上查找社区维护的 @types/ai-ecoverse\_\_wasm-emscripten 是否存在。

### @ai-ecoverse/wasm-emscripten 可以商用吗？

@ai-ecoverse/wasm-emscripten 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @ai-ecoverse/wasm-emscripten 的下载量有多少？

根据 npm 官方下载统计，@ai-ecoverse/wasm-emscripten 在 2026/10/05 – 2026/11/03 这 30 天内被下载 4,399 次，日均约 147 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @ai-ecoverse/wasm-emscripten 还在维护吗？

最新版本 6\.0\.9-31 发布于 2026/10/23（15 天前）；至今共发布 29 个版本，其中过去 12 个月发布了 29 个；首次发布于 2026/10/01。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

