Emscripten crash with mappedGlobals.find(name) != mappedGlob
Emscripten crash with mappedGlobals.find(name) != mappedGlobals.end()
当我使用 -s ASYNCIFY=1 编译 Emscripten 代码并调用外部库类时,我遇到了问题。
_setjmpTable
Assertion failed: mappedGlobals.find(name) != mappedGlobals.end() ? true : (std::cerr << name.str << 'n', false), file C:emslavebuildslavewin-tagbuilderemsdkbinaryentag-1.38.29srcasm2wasm.h, line 1659
shared:ERROR: 'C:/workspace/emsdk/clang/e1.38.29_64bit/binaryenbinasm2wasm hello.temp.asm.js --total-memory=16777216 --trap-mode=allow -O3 --mem-init=hello.js.mem --mem-base=1024 --wasm-only -o hello.wasm --mvp-features' failed (-1073740791)
这个问题在emscripten github问题中提到
这里问题是因为
异步传递将一些代码移出 main,然后它找不到 那些本地变量
正如Emscripten作者所说
当我从外部库 ( .bc ( 调用其他类并使用 ASYNCIFY=1 编译时,就会出现问题。但是,当我删除异步时,一切都很好。
我还发现如果我在之前添加代码
jmp_buf env;
if(!setjmp(env))
{
longjmp(env,1);
emscripten_sleep(1000);
}
代码可以成功编译,但是当我在浏览器上运行它时它崩溃了
如何解决问题,因为我必须同时使用 ASYNCIFY 和外部库中的类?
当我将emscripten_wget(...)
与-s ASYNCIFY=1
一起使用时,我遇到了同样的问题。我必须改用emscripten_async_wget
,它不需要异步。
附言我使用 emscripten 版本 1.38.29。
根据这个,ASYNCIFY是一个已知的错误
ASYNCIFY 在异常和 塞特姆普。Emterpreter尚未在这些功能上进行测试,因此 目前还不清楚它是否有效。更新:存在已知问题 执行和异步操作,当有 try-catch(llvm 调用(时 堆栈。
使用 EMTERPRETIFY 而不是 ASYNCIFY
FLAGS += -s EMTERPRETIFY_FILE="data.binary"
FLAGS += -s EMTERPRETIFY=1
FLAGS += -s EMTERPRETIFY_ASYNC=1
相反
当我使用 WASM=0
禁用网络汇编时它也工作正常
相关文章:
- 使用模板进行堆栈实现; "name followed by :: must be a class or namespace"
- C++中"dependent name"的定义是什么?
- 将系数存储在头文件的数组中("does not name a type"错误)
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- C++初学者:为什么我的编译器根据我的循环返回"name not found"?
- 当初始值设定项是基类名时'initializer does not name a non-static data member or base class'错误
- 如何解决"'mutex' in namespace 'std' does not name a type"?
- 在 C++ 中使用命名空间时出现"does not name a type"错误
- 已声明时"Does not name a type"错误
- 嵌套类"does not name a type"
- C++ "Using Uninitialized Memory.. (variable name) "
- 在反转字符串'my.name.is'时,我得到的输出为"is@.name.my"。我不明白'@'是从哪里来的
- C++错误:"class name"之前的预期类型说明符
- C++从"NameBase"类到模板"Name"类的相互关系的成语(或模式)
- 错误 C6011:取消引用空指针"NAME"。C++
- 无法构建 RcppArmadillo.package.skeleton 测试包:"R_init_"的多重定义<name>
- C++ 中的类之间的数据重新循环 - 错误:'<class name>'未在此范围内声明
- "char const * name() const _WEBSOCKETPP_NOEXCEPT_TOKEN_ {"剂量是什么意思
- 为什么 std::locale( " " ).name() 在 clang 和 gcc 上给出不同的结果?
- Emscripten crash with mappedGlobals.find(name) != mappedGlob