私は WebAssembly に関する良い本を読んでおり、「グルー コード」を使用せずに JS 関数を wasm
にインポートする方法を学ぼうとしています。
これは、2 つの extern
関数が宣言されている C ファイルです
次に、次の手順を使用して、c
コードを wasm
にコンパイルしました。
リーリー
インスタンス化し、jsFillRect()
と jsClearRect()
を定義し、インポートを使用してインポートする JS スクリプトを作成するように指示されました。オブジェクトをモジュールの env
に追加します。
リーリー
エラーを受け取りました:
ここで示すインポートされたオブジェクトは、すでに元のオブジェクト (ここで見つけることができます) の修正バージョンです。この例では、関数は JS で
_jsClearRect() として宣言されていますが、モジュールは jsClearRect()
の定義を見つけることができません。次に、memoryBase
として宣言されているため、__memory_base
の定義を見つけることができませんが、Object
GOT のキング表現がわかりません。 .mem
。
いろいろ調べてみたところ、古い API を使用しているように感じましたが、これを実現する適切なソリューションが見つかりません。
それでは私の質問は次のとおりです:
Javascript 関数を wasm モジュールにインポートするにはどうすればよいですか?
GOT.mem
emscripten によって使用されるダイナミック リンク ABI から。この場合、動的にリンクされたコンテンツは必要ないと思うので、-sSIDE_MODULE
を削除してもよいし、削除すべきです。これにより、提供する必要があるインポートが簡素化/削減されます。 (たとえば、
table
やmemory
を指定する必要はありません)。