Emscripten:自定义生成的 js,以便它以自定义方式加载 .wasm 文件

Emscripten: Customize the generated js so it loads the .wasm file in a custom way

通过使用以下选项进行编译,

emcc -s WASM=1 main.cpp -o index.js

emscripten 生成一个 index.wasm 和一个 js 包装器 index.js。 js 包装器加载位于同一目录中的 .wasm 文件,当它在浏览器中为 运行 时使用 XMLHttpRequest

那么如果需要手动加载.wasm文件怎么办呢?加载部分似乎硬编码在包装器中。

以下是我需要的一些情况:

我知道我只能通过

生成.wasm文件

emcc -s WASM=1 main.cpp -o index.wasm

但后来我丢失了包装器,这在使用 SDL 和 GLES 等 emscripten APIs 时并不是微不足道的。

AFIK,JS 包装器调用 fetch() 而不是 XHR。如果可用,您可以使用 Service Worker 来拦截该请求和 return 任何您想要的东西。

您还可以修改 Emscripten 源代码(我有 v1.39.13)以重写默认加载行为。在文件 $EMSDK/upstream/emscripten/src/preamble.js 中,根据您的喜好修改函数 getBinaryPromise() and getBinary(),然后使用 emcc 构建以在 WASM JS 包装器中拥有您的自定义加载行为。