Emscripten生成的HTML文件在打开时不起作用,必须预先加载wasm二进制文件

时间:2018-04-03 17:48:13

标签: emscripten webassembly

我能够正确编译我的helloWorld.c文件:

#include <stdio.h>

int main(int argc, char ** argv) {
    printf("Hello World\n");
}

使用命令:emcc helloWorld.c -s WASM=1 -o helloWorld.html

但是,当我打开文件helloWorld.html时,页面上会显示以下错误:

  在网络上,我们需要预先加载和设置wasm二进制文件   模块[&#39; wasmBinary&#39]。 emcc.py将在生成时为您执行此操作   HTML(但不是JS)中止(&#34;在网络上,我们需要ism二进制文件   预装并设置在模块[&#39; wasmBinary&#39;]上。 emcc.py会这样做的   你在Error时生成HTML(但不是JS)&#34;)       在jsStackTrace(文件:/// C:/workspaces/wasm/HelloWorld/helloWorld.js:1001:13)       at stackTrace(file:/// C:/workspaces/wasm/HelloWorld/helloWorld.js:1018:12)       在中止(文件:/// C:/workspaces/wasm/HelloWorld/helloWorld.js:2414:44)       at getBinary(file:/// C:/workspaces/wasm/HelloWorld/helloWorld.js:1528:7)       在file:/// C:/workspaces/wasm/HelloWorld/helloWorld.js:1542:16

如何正确加载我的应用?这有什么不对?

1 个答案:

答案 0 :(得分:3)

生成的hmtl文件旨在从Web服务器提供。如果您检查浏览器控制台,您可能会看到类似这样的错误:

  

Fetch API无法加载file:/// {您的wasm文件路径}。 URL方案必须   be&#34; http&#34;或&#34; https&#34;对于CORS请求。

要使用本地Web服务器运行您的应用,请使用Emscripten命令emrun

emrun helloWorld.html

您可能还会在生产环境中看到此错误,在这种情况下,.wasm文件的请求可能已返回非200状态代码。