使用MODULARIZE选项编译时,如何访问emscripten的文件系统API



如果我使用emcc编译C++代码而不使用-s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"',我可以加载WebAssembly并访问文件系统API,如下所示:

HTML:

<script type="text/javascript">
var Module = {
onRuntimeInitialized: function() {
console.log('Module loaded!');
if (FS.mkdir) {
console.log('File System API available!');
}
}
};
</script>
<script type="text/javascript" src="myWebAssemblyModule.js"></script>
<script type="module" src="my.js"></script>

日志:

Module loaded!
File System API available!

但是,如果我添加-s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"'作为编译器选项,并尝试访问基于Promise的文件系统API,它将不起作用:

HTML:

<script type="text/javascript" src="myWebAssemblyModule.js"></script>
<script type="module" src="my.js"></script>

my.js:

createMyModule().then(MyModule => {
console.log('Module loaded!');
if (MyModule.FS.mkdir) {
console.log('File System API available!');
}
});

日志:

Module loaded!

因此,我如何使用";"模块化/基于承诺";方法

MyModule.FS可以顺便访问,但不能访问MyModule.FS.mkdir

要使FS在模块化构建中可用,您必须显式导出它:

emcc ... -s 'EXPORTED_RUNTIME_METHODS=["FS"]'

相关内容

  • 没有找到相关文章

最新更新