MODULARIZE的Emscripten程序是否在自己和常规模块之间共享文件系统?

问题描述

我打算用Emscripten MODULARIZE = 1模式编译一些程序,并使用仅预加载文件系统的虚拟常规模块。

模块化程序是否可以与虚拟模块共享FS,即cat程序能够与虚拟emscriptenfs程序共享FS?

cowsay程序只是在这里证明我确实计划拥有多个程序,而不仅仅是cat

emscriptenfs.js: test/test.txt test/test.pdf test/test.png test/test.svg test/test.tex
    emcc emscriptenfs.c -o $@ --preload-file test@/home/web_user/test -s FORCE_FILESYstem=1 -s INVOKE_RUN=0

cat.js:
    emcc cat.c -o $@ -s INVOKE_RUN=0 -s EXPORTED_FUNCTIONS='["_main"]' -s EXPORTED_RUNTIME_METHODS='["callMain"]' -s MODULARIZE=1 -s EXPORT_NAME=cat

cowsay.js:
    emcc cowsay.c -o $@ -s INVOKE_RUN=0 -s EXPORTED_FUNCTIONS='["_main"]' -s EXPORTED_RUNTIME_METHODS='["callMain"]' -s MODULARIZE=1 -s EXPORT_NAME=cowsay
// emscriptenfs.c

#include <stdio.h>

int main(int argc,char* argv[])
{
    puts("Hello World!");
}
// cat.c

#include <stdio.h>

#define BUFSIZE 100

int main( int argc,char *argv[] )
{
    char *filename;
    FILE *file;
    char buf[BUFSIZE];

    if (argc != 2) {
        fprintf (stderr,"Usage: %s <filename>\n",argv[0]);
        return 1;
    }

    file = fopen (argv[1],"r");
    while (fgets (buf,BUFSIZE,file))
        puts (buf);

    fclose (file);

    return 0;
}
// cowsay.cpp

#include <stdio.h>

int main(int argc,char **argv)
{
  int i;

  if (argc == 1)
    printf("< moOh >\n");
  for (i = 1; i < argc; i++)
    if (i == 1)
      printf("/ %s \\\n",argv[i]);
    else if (i == argc - 1)
      printf("\\ %s /\n",argv[i]);
    else
      printf("| %s |\n",argv[i]);
  printf("  \\ ^__^\n");
  printf("    (oo)\\_______\n");
  printf("    (__)\\       )\\/\\\n");
  printf("        ||----w |\n");
  printf("        ||     ||\n");
  return (0);
}
// works
cowsay().then(Module => Module.callMain(['hi']));

// fails with signature mismatch error
cat().then(Module => Module.callMain(['test/test.txt']));

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)