调用 addFunction 时 Emscripten wasmTable null

问题描述 投票:0回答:1

我正在尝试让一个较旧的 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"                                            \
            ]'

任何想法将不胜感激。

reactjs emscripten
1个回答
0
投票

发现事物是异步初始化的,并且在初始化完成之前调用了 addFunction 。 Emscripten 常见问题解答

© www.soinside.com 2019 - 2024. All rights reserved.