Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/476.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未捕获类型错误:Module.cwrap不是函数_Javascript_C_Emscripten_Webassembly_Openh264 - Fatal编程技术网

Javascript 未捕获类型错误:Module.cwrap不是函数

Javascript 未捕获类型错误:Module.cwrap不是函数,javascript,c,emscripten,webassembly,openh264,Javascript,C,Emscripten,Webassembly,Openh264,我需要在浏览器端解码h264数据,因为我使用的是使用emscripten的openh264库内置web组件。 我已经成功地构建了它,并尝试在java脚本中使用它来解码h264数据。但我有一个错误 var open_decoder = Module.cwrap('open_decoder', 'number', null); 错误为:未捕获类型错误:Module.cwrap不是函数 如果有人使用emscripten构建openh264,请帮助我解决这个问题 我使用以下步骤使用emscripten

我需要在浏览器端解码h264数据,因为我使用的是使用emscripten的openh264库内置web组件。 我已经成功地构建了它,并尝试在java脚本中使用它来解码h264数据。但我有一个错误

var open_decoder = Module.cwrap('open_decoder', 'number', null);
错误为:未捕获类型错误:Module.cwrap不是函数

如果有人使用emscripten构建openh264,请帮助我解决这个问题

我使用以下步骤使用emscripten构建openh264

  • $source emsdk_env.sh
  • $./emsdk激活最新版本
  • cd openh264 js主机
  • 制造

  • 注意:openh264的代码已经从github(ttyridal)下载,并且已经使用emscripten Compatible生成文件。

    可能您正在尝试在emscripten运行时初始化之前使用
    模块,因此
    模块.cwrap
    未定义

    要确保运行时准备就绪,请将代码放入
    模块.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>
    
    
    变量模块={
    onRuntimeInitialized:函数(){
    my_add=Module.cwrap('my_add','number',['number','number']))
    警报('1+2='+my_add(1,2));
    },
    };
    

    请参阅

    中的完整示例。您可能正在尝试在Emscripten运行时初始化之前使用
    模块
    ,因此
    模块.cwrap
    未定义

    要确保运行时准备就绪,请将代码放入
    模块.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>
    
    
    变量模块={
    onRuntimeInitialized:函数(){
    my_add=Module.cwrap('my_add','number',['number','number']))
    警报('1+2='+my_add(1,2));
    },
    };
    
    请参阅中的完整示例

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

    emcc source.c -s EXPORTED_FUNCTIONS=['_my_add'] -s EXTRA_EXPORTED_RUNTIME_METHODS=["cwrap"]
    
    编译源代码时在命令行中包含上述内容

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

    我在这个问题上做了一些研发,我认为问题不在java脚本方面。我认为emscripten的makefile命令有一些问题。makefile命令类似于“em++-O1$(TOTALMEMORY)-o$@$^-s EXPORTED_FUNCTIONS=$(h264symbols)-s-Iopenh264/codec/api/svc/”。因此,在对此进行了一些研究和开发之后,我发现您需要添加“EXTRA_EXPORTED_RUNTIME_METHODS='[“cwrap”]”选项。我使用此选项编辑了cmd,现在出现了类似TypeError:Module.asm的错误。未定义\u open_解码器。从emscripten文档中可以看出:cwrap实际上并不调用编译代码(仅调用它返回的包装器即可)。这意味着在运行时完全初始化之前提前调用cwrap是安全的(但是调用返回的包装函数必须等待运行时,当然,就像调用一般的编译代码一样)。我在这个问题上做了一些研究和开发,我认为问题不在java脚本方面。我认为emscripten的make file命令有一些问题。make file命令类似于“em++-O1$(TOTALMEMORY)-o$@$^-s EXPORTED_FUNCTIONS=$(h264symbols)-s-IOPEN264/codec/api/svc/”。因此,在进行了一些研究和开发之后,我发现您需要添加”额外导出的运行时方法='[“cwrap”]'选项。我用这个选项编辑了cmd,现在得到了类似TypeError:Module.asm的错误。_open_解码器未定义。从emscripten文档中:cwrap实际上并不调用编译代码(只调用它返回的包装器即可)。这意味着在运行时完全初始化之前尽早调用cwrap是安全的(但是调用返回的包装函数必须等待运行时,当然,就像调用一般编译代码一样)。