我正在尝试让一个较旧的 Emscripten 项目在 React 中运行,并且当我尝试调用 addFunction 时遇到运行时问题。堆栈跟踪看起来像:
core.js:1981 Uncaught TypeError: Cannot read properties of undefined (reading 'grow')
at getEmptyTableSlot (core.js:1981:1)
at Object.addFunction (core.js:2013:1)
at CoreBridge (CoreBridge.js:42:1)
调用grow(1)时,getEmptyTableSlot中的异常是null wasmTable:
var getEmptyTableSlot = () => {
// Reuse a free index if there is one, otherwise grow.
if (freeTableIndexes.length) {
return freeTableIndexes.pop();
}
// Grow the table
try {
wasmTable.grow(1);
我尝试过使用和不使用 wasm 文件运行它(使用 -sWASM=0 或 1),两种情况都在同一位置失败。对于 -sWASM=1 的情况,我非常确定 .wasm 文件已正确加载,因为我从服务器中删除了 .wasm 文件并收到指示加载问题的不同错误。我还在 make 文件中尝试了很多选项,但没有任何乐趣。当前的链接标志集如下所示:
LDFLAGS = --js-library platformDefinitions.js \
--post-js post.js \
-s NO_DYNAMIC_EXECUTION=1 \
-s RESERVED_FUNCTION_POINTERS=6 \
-s EXPORTED_RUNTIME_METHODS=cwrap,addFunction,wasmTable \
-s ALLOW_TABLE_GROWTH \
-s ENVIRONMENT=web \
-s EXPORTED_FUNCTIONS='[ \
"_SCB_SDKInit", \
"_SCB_SDKFinal", \
"_SCB_registerReceivedAPIResponseCallback", \
"_SCB_unregisterReceivedAPIResponseCallback", \
"_SCB_registerReceivedSistrCallback", \
"_SCB_unregisterReceivedSistrCallback", \
"_SCB_registerAPICommandFailedCallback", \
"_SCB_unregisterAPICommandFailedCallback", \
"_SCB_sendSistr", \
"_SCB_sendAPICommand", \
"_SCB_freeOutData", \
"_SCB_createToy", \
"_SCB_destroyToy", \
"_SCB_createObject", \
"_SCB_destroyObject" \
]'
任何想法将不胜感激。
发现事物是异步初始化的,并且在初始化完成之前调用了 addFunction 。 Emscripten 常见问题解答