EmscriptenでCライブラリをjavascriptから呼び出します。
今回参考にしたのは、ここ「Emscripting a C library to Wasm」
フィボナッチ数を計算するCのプログラムを書いて、それをjavascriptで呼び出してみます。
ソース
fib.c
#include <emscripten.h>
EMSCRIPTEN_KEEPALIVE
int fib(int n) {
int i, t, a = 0, b = 1;
for (i=0; i < n; i++) {
t = a + b;
a = b;
b = t;
}
return b;
}
index.html
<script src="a.out.js"></script>
<script>
Module.onRuntimeInitialized = _ => {
const fib = Module.cwrap("fib", 'number', ['number']);
console.log(fib(12));
};
</script>
コンパイル
コンパイルは、このdocker image 「trzeci/emscripten」をつかってます。
docker run --rm -v $(pwd):/src trzeci/emscripten emcc -03 -s WASM=1 -s EXTRA_EXPORTED_RUNTIME_METHODS='["cwrap"]' fib.c
動作確認
http-serverとかで、サーバーを起動して、ブラウザのログに 「223」がでればOK。