问题描述
我打算用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 (将#修改为@)