我已将我的程序编译成单个program.js
文件,在工作人员中,我致电:
importScripts('program.js');
Module.callMain();
但是,虽然callMain
正在执行,但在该函数调用的堆栈中,我收到Undefined is not a function
错误。
我的预感是,我还没有阅读一些必要的 emscripten 文档,wiki或源代码。
emcc
需要在编译时为该任务传递的特殊选项(参见{{ 3}})window
/dev/tty
的实施情况,/dev/stdin
与[{1}}相关联的实施情况,以及/dev/stdout
的实施情况,我相信可能会有console
的输出,我不相信工人会支持program.data
文件加载其他文件,如果这有所不同提前致谢。如果我可以添加任何细节,请告诉我。
注意:顶部的代码已经过简化 - 它似乎不是语法错误。
Error.stack
)只告诉我Module.callMain
发生了错误。它没有告诉我有关可能导致它的导入脚本的任何信息。 :(答案 0 :(得分:2)
Emscripten输出应该在网站,网络工作者或节点中运行,所有这些都无需修改。可能存在一些限制(例如,在工作器中没有要渲染的画布),但除此之外,只有纯JS可以在这三种环境中运行。
emscripten生成的完全相同的JS文件是否在工作者之外工作?
如果callMain()
失败,请检查您的项目是否有main()
功能。
答案 1 :(得分:1)
加载js后立即(importScripts()
)它可能尚未执行,因此您尚未准备好。事情准备好后,您可以要求Emscripten为您拨打电话。您可以通过变量Module
访问函数。
var Module = {
preRun:[],
onRuntimeInitialized: function load_done_callback() {
console.info("The Module is loaded and is accessible here", Module);
console.inf("no need to call main() though", Module._main); // add "_" before your function names
},
};
importScripts('program.js');
无需致电callMain()
或Module._main()
,我们会为您致电。您可能需要在编译器命令行中设置NO_EXIT_RUNTIME=1
:
em++ \
-s EXPORTED_FUNCTIONS="['_main', '_myfunction1' , '_my_function2' ]" \
-s NO_EXIT_RUNTIME=1 \
-s DEMANGLE_SUPPORT=1 \
program.cpp \
-o ./program.js
请注意,在您使用importScripts()
的情况下,您不需要编译为工作人员。