Emscripten 是把 C/C++ 编译为 WebAssembly 的标准工具链,基于 LLVM,能将 C/C++ 代码编译为 Wasm 二进制文件(.wasm)以及配套的 JavaScript 胶水代码。它不仅处理代码编译,还模拟了一套完整的系统环境,把 printf、malloc 乃至 SDL 等库调用映射到浏览器 JavaScript API 上。
官方推荐通过 Emscripten SDK(emsdk)来安装和管理工具链,典型流程为:克隆 emsdk 仓库后执行 ./emsdk install latest 安装最新版本,再用 ./emsdk activate latest 激活,最后 source ./emsdk_env.sh 设置环境变量。需要注意的是,应避免使用系统包管理器安装的旧版本,以免不支持新特性或存在已知缺陷。
编译时通过 emcc 命令指定优化级别和导出函数,例如导出供 JavaScript 调用的函数符号,并生成必要的运行时方法。生成的胶水代码负责内存管理、文件系统模拟以及 Wasm 模块的加载与初始化,从而大幅降低集成复杂度。SQLite 编译为 WebAssembly 后作为完全运行在客户端的关系型数据库,是这一工具链在生产环境中的代表性应用之一。