用Emscripten编译C++为WebAssembly需替换g++为em++,安装官方emsdk并配置环境变量,验证emcc/em++版本后即可编译单文件生成WASM及JS胶水代码。

用 Emscripten 把 C++ 项目编译成 WebAssembly 很直接,核心是把 g++ 换成 em++,并注意输出目标和 JS 胶水代码的配合。
Emscripten 是官方推荐的 C/C++ 到 WebAssembly 的工具链。别用 npm 安装的简化版(如 emscripten 包),它不完整。正确方式是:
emsdk)./emsdk install latest 和 ./emsdk activate latest
source ./emsdk_env.sh(Linux/macOS)或 emsdk_env.bat(Windows)把工具加入环境变量
emcc --version 和 em++ --version 确保正常最简场景:一个 main.cpp,含 int main():
#include <iostream>
int main() {
std::cout << "Hello from WebAssembly!\n";
return 0;
}运行以下命令:
立即学习“C++免费学习笔记(深入)”;
em++ main.cpp -o hello.html --no-entry
-o hello.html:生成 HTML + JS + WASM 三件套(也可用 .js 只输出 JS 胶水)--no-entry:避免自动生成 main() 入口调用(适合后续手动控制执行)-O2 优化;加 -g 可保留调试信息生成的 hello.html 可直接用浏览器打开(需本地起服务,如 npx http-server,不能双击打开)。
已有 CMake 项目的,只需切换编译器:
EMSCRIPTEN 环境变量指向 SDK 根目录(自动识别)emcmake cmake -B build -S . -DCMAKE_BUILD_TYPE=Releasecmake --build build
emcmake 是封装脚本,会自动配置 CMAKE_CXX_COMPILER 为 em++,并传入必要 flagsconan 或 vcpkg 配合 Emscripten toolchain,或直接用 Emscripten 自带的 port(如 -s USE_SDL=2)默认 C++ 函数不会暴露给 JS。要用 EMSCRIPTEN_BINDINGS 或 C 风格导出:
extern "C" {
int add(int a, int b) {
return a + b;
}
}编译时加:em++ math.cpp -o math.js -s EXPORTED_FUNCTIONS='["_add"]' -s EXPORTED_RUNTIME_METHODS='["ccall","cwrap"]'
EXPORTED_FUNCTIONS 列出要导出的函数名(带下划线前缀)EXPORTED_RUNTIME_METHODS 启用 JS 辅助方法,如 ccall 可直接调用<script src="math.js"></script><br>
<script>console.log(Module.ccall('add', 'number', ['number','number'], [2,3]));</script>基本上就这些。Emscripten 编译流程和原生 g++ 接近,关键在环境、入口控制和 JS 交互设计。不复杂但容易忽略服务托管和符号导出细节。
以上就是C++如何将项目编译成WebAssembly?Emscripten C++ to WASM教程【Web开发】的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号