未捕获的TypeError:Module.cwrap不是函数

时间:2019-05-08 11:53:18

标签: javascript c emscripten webassembly openh264

我需要在浏览器端解码h264数据,因为我正在使用emscripten在Web Assembly中构建openh264库。 我已经成功构建它,并尝试在Java脚本中使用它来解码h264数据。但是我在下一行时遇到一个错误,

var open_decoder = Module.cwrap('open_decoder', 'number', null);

错误是:未捕获的TypeError:Module.cwrap不是函数

如果有人用emscripten构建了openh264,请帮助我解决问题。

按照我用emscripten构建openh264的步骤。

  1. $源emsdk_env.sh
  2. $。/ emsdk激活最新
  3. cd openh264-js-master
  4. 制作

注意:openh264的代码已从github(ttyridal)下载,并且已经具有emscripten主管的make文件。

2 个答案:

答案 0 :(得分:0)

您可能正在尝试初始化Emscripten运行时之前使用Module,所以Module.cwrap是未定义的。

要确保运行时已准备就绪,请将代码放在Module.onRuntimeInitialized内,如以下示例所示:

<!doctype html>
<html>
<body>
    <script>
        var Module = {
          onRuntimeInitialized: function() {
            my_add = Module.cwrap('my_add', 'number', ['number', 'number'])
            alert('1 + 2 = ' + my_add(1, 2));
          },
        };
    </script>
    <script async type="text/javascript" src="index.js"></script>
</body>
</html>

查看this github repo中的完整示例

答案 1 :(得分:0)

-s EXTRA_EXPORTED_RUNTIME_METHODS=["cwrap"]

在编译源代码时在命令行中包含以上内容

emcc source.c -s EXPORTED_FUNCTIONS=['_my_add'] -s EXTRA_EXPORTED_RUNTIME_METHODS=["cwrap"]