WebAssembly quick start

参考: google WebAssembly Introducation

1. 安装准备

  1. Git
  2. CMake
  3. Host system compiler
  4. Python 2.7

2. 下载编译工具

  1. install emsdk (emsdk(Emscripten toolchain) 是一个预编译的工具链) Link

  2. 执行命令:

MacBook-Pro-6:hello mac$ emcc hello.c -Os -s WASM=1 -s SIDE_MODULE=1 -o hello.wasm

可能会报错:

Traceback (most recent call last):

File "/Users/mac/Documents/WebAssembly/emsdk/emscripten/1.37.22/emcc", line 5, in <module>

from tools.toolchain_profiler import ToolchainProfiler

ImportError: No module named tools.toolchain_profiler

原因:安装时失败,重装即可。

3. 使用.wasm文件

  1. wasm作为一个模块导入进来,依靠JS API得到模块中的函数,如下

  2. 编写C文件(gen.c):

#include<stdio.h>

int add(int i, int j) {

return i + j;

}

4. 使用emcc 编译

*   emcc gen.c -s ONLY_MY_CODE=1 -s WASM=1 -s EXPORTED_FUNCTIONS="['_add']" -o gen.js

在上面的命令行中,_add函数作为gen.c中add函数的导出名。

  1. 在js中调用
var  add = new Function();

const memory = new WebAssembly.Memory({ initial: 256, maximum: 256 });

const importObj = {

env: {

abortStackOverflow: () => { throw new Error('overflow'); },

table: new WebAssembly.Table({ initial: 0, maximum: 0, element: 'anyfunc' }),

tableBase: 0,

memory: memory,

memoryBase: 1024,

STACKTOP: 0,

STACK_MAX: memory.buffer.byteLength,

}

};

fetch('gen.wasm').then((response) => response.arrayBuffer())

.then((bytes) => WebAssembly.instantiate(bytes, importObj))

.then((wa) => add = wa.instance.exports._add);

//若出现Link_error,则检查importObj中是否未包含错误提示中指出的关键字。

5. 参数传递

  1. 若现在用C编写一个对整数数组进行排序的算法,将其编译为wasm,如何在JS中调用并传递数组参数?
    Ans: 参见:pass array to C function with emscripten
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,056评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,993评论 19 139
  • 《穷查理宝典》中,我至今仍印象深刻的,不是具体的投资建议,而是查理芒格说的,要建立多元的思维方式,即用各种学科的知...
    探索者John阅读 92评论 0 0
  • 今天早上送儿子上学,途中因为我的大意让儿子的腿撞到了栏杆。儿子“啊!”的大叫一声,我想应该是很疼了。 到了校门口,...
    fy晨曦阅读 274评论 0 0
  • 晨曦中 一位母亲推着轮椅 儿子坐在上面 她小心翼翼的推着 每一步都很慢很慢很慢 我在前面越走越远 却不敢回头望一眼...
    ii南有乔木阅读 127评论 2 6