首页 > 后端开发 > C++ > 正文

c++怎么编译成WebAssembly并在浏览器中运行_c++跨平台WASM编译与部署教程

冰火之心
发布: 2025-11-19 14:53:02
原创
351人浏览过
使用Emscripten可将C++编译为WebAssembly以提升前端性能。首先安装Emscripten工具链并配置环境,接着编写含EMSCRIPTEN_KEEPALIVE修饰的C++代码,通过emcc命令导出函数并生成.wasm、.js和.html文件,最后用emrun运行或嵌入自定义HTML,通过Module对象在JS中调用C++函数,支持内存扩展、文件系统等高级功能,适用于计算密集型任务。

c++怎么编译成webassembly并在浏览器中运行_c++跨平台wasm编译与部署教程

将C++代码编译成WebAssembly(WASM)并在浏览器中运行,可以显著提升前端性能,尤其适合计算密集型任务。实现这一目标最常用、最成熟的工具是Emscripten。下面是一个清晰的教程,带你从零开始完成C++到WASM的编译与部署。

1. 安装Emscripten编译工具链

Emscripten 是一个完整的LLVM+Clang+Binaryen工具链,能将C/C++编译为WebAssembly。

  • 克隆Emscripten仓库:
    git clone https://github.com/emscripten-core/emsdk.git
  • 进入目录并安装最新SDK:
    cd emsdk
    ./emsdk install latest
    ./emsdk activate latest
  • 设置环境变量:
    source ./emsdk_env.sh(Linux/macOS)或运行emsdk_env.bat(Windows)

完成后,emcc 命令即可在终端使用。

2. 编写简单的C++程序

创建一个名为 hello.cpp 的文件:

立即学习C++免费学习笔记(深入)”;

#include <emscripten.h>
#include <iostream>

extern "C" {
  EMSCRIPTEN_KEEPALIVE
  int add(int a, int b) {
    return a + b;
  }
}

int main() {
  std::cout << "Hello from C++!\n";
  return 0;
}
登录后复制

EMSCRIPTEN_KEEPALIVE 确保函数不会被编译器优化掉,方便JS调用。

3. 编译为WebAssembly

使用emcc命令编译:

emcc hello.cpp -o hello.html -s WASM=1 -s ALLOW_MEMORY_GROWTH=1 -s EXPORTED_FUNCTIONS='["_main", "_add"]' --emrun

关键参数说明:

  • -s WASM=1:启用WebAssembly输出
  • -s ALLOW_MEMORY_GROWTH=1:允许堆内存动态增长
  • EXPORTED_FUNCTIONS:导出C++函数供JS调用(注意函数名前加_)
  • --emrun:生成可直接运行的HTML用于测试

编译后会生成:hello.wasm、hello.js、hello.html。

码哩写作
码哩写作

最懂作者的AI辅助创作工具

码哩写作 91
查看详情 码哩写作

4. 在浏览器中运行

方式一:直接运行生成的HTML

emrun hello.html

这会启动本地服务器并在浏览器打开页面,控制台输出“Hello from C++!”。

方式二:自定义HTML页面集成

创建自己的 index.html,加载生成的JS胶水代码:

<script src="hello.js"></script>
<script>
Module.onRuntimeInitialized = function() {
  console.log(Module._add(5, 7)); // 输出 12
};
</script>
登录后复制

通过 Module._函数名() 调用C++导出函数。

5. 高级功能支持

若需使用标准库、文件系统或异步操作:

  • -s STANDALONE_WASM:生成独立WASM模块
  • -s FORCE_FILESYSTEM=1:启用虚拟文件系统
  • -s ASYNCIFY:支持C++中使用async/await
  • --bind:结合WebIDL Binder支持C++类绑定到JavaScript

基本上就这些。掌握Emscripten后,你可以将图像处理、音视频编码、游戏逻辑等高性能C++模块无缝集成到网页应用中。整个过程不复杂但容易忽略细节,比如函数导出和命名修饰问题。建议从简单函数开始,逐步增加复杂度。

以上就是c++怎么编译成WebAssembly并在浏览器中运行_c++跨平台WASM编译与部署教程的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号