Javascript 未捕获类型错误:Module.cwrap不是函数
我需要在浏览器端解码h264数据,因为我使用的是使用emscripten的openh264库内置web组件。 我已经成功地构建了它,并尝试在java脚本中使用它来解码h264数据。但我有一个错误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
var open_decoder = Module.cwrap('open_decoder', 'number', null);
错误为:未捕获类型错误:Module.cwrap不是函数
如果有人使用emscripten构建openh264,请帮助我解决这个问题
我使用以下步骤使用emscripten构建openh264
注意: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是安全的(但是调用返回的包装函数必须等待运行时,当然,就像调用一般编译代码一样)。