WebAssembly使用

WebAssembly 的目的是什么?

让一些 C 或 C++ 程序,运行在 web 端。例如游戏…

那么首先就需要将 C 或 C++ 代码,转化为 js 代码,然后运行在浏览器里。
转化后的这个 js 代码叫做 asm.js, 转化代码的编译器叫做 emscripten

如何使用 emscripten?

先去按照步骤下载 emscripten,执行到 source ./emsdk_env.sh 后面,就可以编译 c 程序了。

ps: 每次打开都要在 emsdk 文件夹 执行 source ./emsdk_env.sh

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <emscripten.h>
#include <iostream>

int main() {
int val1 = 21;
int val2 = EM_ASM_INT({ return $0 * 2; }, val1);

std::cout << "Heallo WebAssembly == " << val2 << std::endl;
}

// hello.cc
// 以下是 Emscripten 提供的一些宏
// EM_ASM:调用 JS 代码,没有参数,也没有返回值。
// EM_ASM_ARGS:调用 JS 代码,可以有任意个参数,但是没有返回值。
// EM_ASM_INT:调用 JS 代码,可以有任意个参数,返回一个整数。
// EM_ASM_DOUBLE:调用 JS 代码,可以有任意个参数,返回一个双精度浮点数。
// EM_ASM_INT_V:调用 JS 代码,没有参数,返回一个整数。
// EM_ASM_DOUBLE_V:调用 JS 代码,没有参数,返回一个双精度浮点数。

下面的操作都在 emsdk 文件夹下完成

1
2
3
4
5
6
7
> source ./emsdk_env.sh
Setting up EMSDK environment (suppress these messages with EMSDK_QUIET=1)
Adding directories to PATH: .......

> emcc ~/test/hello.cc -o ~/test/hello.out.js
> emcc ~/test/hello.cc -o ~/test/hello.html
# -o 控制输出路径

ps: 需要 用 服务来运行 html 文件; npm i serve -g

更多 WebAssembly…

https://github.com/mbasso/awesome-wasm

作者

Huasun47

发布于

2022-04-05

更新于

2022-04-05

许可协议