【问题标题】:How do I access the File System API of emscripten when compiled with MODULARIZE option?使用 MODULARIZE 选项编译时如何访问 emscripten 的文件系统 API?
【发布时间】:2020-09-18 09:19:44
【问题描述】:

如果我用emcc 编译我的C++ 代码而不用-s MODULARIZE=1 -s 'EXPORT_NAME="createMyModule"',我可以像这样加载我的WebAssembly 并访问File System 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>

我的.js:

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

日志:

Module loaded!

那么如何使用“基于模块化/承诺”的方法访问文件系统 API?

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

【问题讨论】:

    标签: javascript webassembly emscripten


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-02-10
      • 1970-01-01
      • 2017-04-12
      • 2021-07-14
      • 2021-05-06
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 2012-12-26
      相关资源
      最近更新 更多