1、下载安装emsdk
git clone https://github.com/juj/emsdk.git
// 或者码云
git clone https://gitee.com/slightDegree/emsdk.git
// 安装,因为网络问题会经常失败,多试几次就好,或者手动下载一下再继续尝试,已经下载完成的会跳过,
// 如果报错找不到api-ms-win-core-path-l1-1-0.dll,下载后32位放到C:\Windows\System32,64位
// 放到C:\Windows\SysWOW64目录
E:\emscripten\emsdk>emsdk install latest
// 安装完成后激活
E:\emscripten\emsdk>emsdk activate latest
// 根据提示设置Path和各个环境变量
Adding directories to PATH:
PATH += E:\emscripten\emsdk\node\14.15.5_64bit\bin
PATH += E:\emscripten\emsdk\upstream\emscripten
EMSDK_NODE = E:\emscripten\emsdk\node\14.15.5_64bit\bin\node.exe
EMSDK_PYTHON = E:\emscripten\emsdk\python\3.9.2-1_64bit\python.exe
JAVA_HOME = E:\emscripten\emsdk\java\8.152_64bit
EM_CACHE = E:/emscripten/emsdk/upstream/emscripten\cache
// 测试是否成功,如果不成功重新开一个命令行窗口测试
emcc -v
2、编译一个c文件
emcc test.c -Os -s WASM=1 -s SIDE_MODULE=1 -o test.wasm
3、测试wasm
function loadWebAssembly (path, imports = {}) {
return fetch(path) // 加载文件
.then(response => response.arrayBuffer()) // 转成 ArrayBuffer
.then(buffer => WebAssembly.compile(buffer))
.then(module => {
imports.env = imports.env || {}
// 开辟内存空间
imports.env.memoryBase = imports.env.memoryBase || 0
if (!imports.env.memory) {
imports.env.memory = new WebAssembly.Memory({ initial: 256 })
}
// 创建变量映射表
imports.env.tableBase = imports.env.tableBase || 0
if (!imports.env.table) {
imports.env.table = new WebAssembly.Table({initial: 0, element: 'anyfunc'})
}
// 创建 WebAssembly 实例
return new WebAssembly.Instance(module, imports)
})
}
loadWebAssembly('test.wasm')
.then(instance => {
console.log(instance)
const add = instance.exports.add//取出c里面的方法
console.log('1 + 2 =', add(1, 2))
})