WebAssembly初体验

LHabc 发布于 2024-04-27


WebAssembly,简称Wasm,是一个低级编程语言。WebAssembly是可移植性抽象语法树,被设计来提供比JavaScript更快速的编译及执行。WebAssembly将让开发者能运用自己熟悉的编程语言(最初以C/C++作为实现目标)编译,再藉虚拟机引擎在浏览器内执行。 ——维基百科

本文使用Emscripten将C++编译到wasm,实现与js的交互。

安装Emscripten SDK

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
./emsdk install 1.39.8

emsdk-1.39.8可以用于编译Qt5.15,已经过官方测试。

激活

./emsdk activate 1.39.8
source ./emsdk_env.sh

初步尝试

  • 源代码
#include <iostream>
int main(int argc, char** argv)
{
    std::cout << "'Hello World' from C++" << '\n';
}
  • 编译
em++ hello.cc -s WASM=1 -o hello.js

会生成hello.jshello.wasm

  • 运行
node hello.js
  • 输出

'Hello World' from C++