【问题标题】:Problems with emscripten (WebAssembly)emscripten (WebAssembly) 的问题
【发布时间】:2020-08-28 19:33:43
【问题描述】:

所以我想将一个简单的 c++ 文件编译成 js 并在网络浏览器中运行。我采取的步骤(在 Windows 上):

git clone https://github.com/emscripten-core/emsdk.git
cd emsdk
emsdk install latest
emsdk activate latest
emsdk_env.bat --global
emsdk update-tags
emcc -v

最后打印的命令:

emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 1.39.15
clang version 11.0.0 "

然后我尝试在 main.cpp 文件中编译“hello world”,如下所示:

#include <iostream>
#include <emscripten.h>
int main()
{
    std::cout<< "hello world!" << std::endl;

    return 0;
}

然后在测试文件夹中我使用了命令:

em++ main.cpp -o 1.html

打印出来的:

cache:INFO: generating system library: libcompiler_rt.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libcompiler_rt.a" for subsequent builds)
cache:INFO:  - ok
cache:INFO: generating system library: libc-wasm.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libc-wasm.a" for subsequent builds)
cache:INFO:  - ok
cache:INFO: generating system library: libc++-noexcept.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libc++-noexcept.a" for subsequent builds)
cache:INFO:  - ok
cache:INFO: generating system library: libc++abi-noexcept.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libc++abi-noexcept.a" for subsequent builds)
cache:INFO:  - ok
cache:INFO: generating system library: libdlmalloc.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libdlmalloc.a" for subsequent builds)
cache:INFO:  - ok
cache:INFO: generating system library: libpthread_stub.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libpthread_stub.a" for subsequent builds)
cache:INFO:  - ok
cache:INFO: generating system library: libc_rt_wasm.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libc_rt_wasm.a" for subsequent builds)
cache:INFO:  - ok
cache:INFO: generating system library: libsockets.a... (this will be cached in "C:\Users\x\.emscripten_cache\wasm\libsockets.a" for subsequent builds)
cache:INFO:  - ok

作为输出,我得到了以下文件: 1.html1.js1.wasm

当我打开1.html 时,我看到了这些错误:

both async and sync fetching of the wasm failed
RuntimeError: abort(both async and sync fetching of the wasm failed) at jsStackTrace@file:///E:/emscripten/emsdk/test/1.js:1952:17
stackTrace@file:///E:/emscripten/emsdk/test/1.js:1969:16
abort@file:///E:/emscripten/emsdk/test/1.js:1728:44
getBinary@file:///E:/emscripten/emsdk/test/1.js:1800:10
getBinaryPromise/<@file:///E:/emscripten/emsdk/test/1.js:1822:13
getBinaryPromise@file:///E:/emscripten/emsdk/test/1.js:1821:10
instantiateArrayBuffer@file:///E:/emscripten/emsdk/test/1.js:1865:12
instantiateAsync@file:///E:/emscripten/emsdk/test/1.js:1892:14
createWasm@file:///E:/emscripten/emsdk/test/1.js:1908:3
@file:///E:/emscripten/emsdk/test/1.js:4990:11

我也在linux上试过,但出现了完全相同的错误。旧版本的 emscripten SDK 也不起作用。

有什么提示吗?

【问题讨论】:

    标签: c++ webassembly emscripten


    【解决方案1】:

    file://的使用问题,我认为你需要运行一个服务器并使用http://。请参阅:https://emscripten.org/docs/getting_started/FAQ.html#faq-local-webserver。还有:https://emscripten.org/docs/compiling/Running-html-files-with-emrun.html

    【讨论】:

      【解决方案2】:

      如果您的网络服务器目录中只有 html 文件夹,也会发生此错误。 关联的 .wasm 文件必须在 Web 服务器的文件夹中。

      因此对于 hello_world 示例,复制 hello.html 文件和 hello.wasm 文件。

      如果在 Chrome 浏览器中进行测试,您可以打开开发者工具面板并选择控制台选项卡。刷新页面并观察任何错误消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-09-21
        • 1970-01-01
        • 1970-01-01
        • 2020-08-23
        • 1970-01-01
        • 2020-05-15
        • 2020-12-06
        相关资源
        最近更新 更多