sprintfへの呼び出しを含む Emscripten でコンパイルされた WASM から JS でWebAssembly.Instanceを作成すると、次のエラーが発生します。
キャッチされていない (約束) LinkError: WebAssembly.Instance(): インポート #1 module="env" function=" _sprintf " エラー: 関数のインポートには呼び出し可能なものが必要です...
sprintfはlibc の一部としてEmscripten に含まれていませんか?
コード:
#include <stdio.h>
extern "C" {
int main() {
char buffer [50];
int n, a=5, b=3;
n=sprintf (buffer, "%d plus %d is %d", a, b, a+b);
return 0;
}
}
コンパイル コマンド:
emcc src/test.cpp -O3 -s WASM=1 -s SIDE_MODULE=1 -o out/test.wasm
emccコンパイルはエラーなしで実行されます。
sprintf行をコメントアウトすると、期待どおり 0 を返すエラーなしで実行されます。
このエラーの理由は何ですか?また、sprintf を使用する場合に回避するにはどうすればよいですか?