所以我想把一个简单的c++文件编译成js,然后在web浏览器中运行它。我采取的步骤(在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;
}然后在test文件夹中,我使用了以下命令:
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.html、1.js、1.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也不能工作。
有什么提示吗?
发布于 2020-05-13 04:45:20
关于使用file://的问题,我认为你需要运行服务器并使用http://。请参阅:https://emscripten.org/docs/getting_started/FAQ.html#faq-local-webserver还有:https://emscripten.org/docs/compiling/Running-html-files-with-emrun.html
发布于 2020-05-28 15:02:30
如果web服务器的目录中只有html文件夹,也可能发生此错误。关联的.wasm文件必须位于web服务器的文件夹中。
因此,对于hello_world示例,复制hello.html文件和hello.wasm文件。
如果在Chrome浏览器中测试,您可以打开开发人员工具面板并选择控制台选项卡。刷新页面并观察任何错误消息。
https://stackoverflow.com/questions/61760552
复制相似问题