c -我怎么能调用' exec '链加载一个WASM程序从另一个?



如何在WASM中调用exec?当我尝试下面的例子时,它给出了错误45(Operation not supported)。是否有一些标志使能exec?callee.wasm是不是exec的正确文件?

终端:

> emcc callee.c -o callee.wasm
> emcc caller.c --embed-file callee.wasm -o index.html
> # will be used through index.html, but node is faster for development
> # note: MEMFS working directory is "/" and "/callee.wasm" exists
> # https://emscripten.org/docs/api_reference/Filesystem-API.html
> node index.js
Caller
Caller: 45

caller.c

#include <errno.h>
#include <stdio.h>
#include <unistd.h>
int main() {
printf("Callern");
char *args[] = {"./callee.wasm", NULL};
execvp(args[0], args);
printf("Caller: %dn", errno);
}

callee.c

#include <stdio.h>
int main() {
printf("Success!n");
}

应该明确这是简化版本,因此不建议将printf("Success!n");放在caller.c中,并完全避免exec

看来你不能,除非你自己重新实现exec

顺序第一:errno45是而不是EOPNOTSUPP在Emscripten下,如问题所示;实际上是ENOEXEC(参见arch/emscripten/bits/errno.hwasi/api.h)。errno数字在不同平台之间通常是不一致的,没有理由BSD libc中的errno数字会与Emscripten libc一致。

并且Emscripten libc硬编码execve总是与ENOEXEC一起失败,并且整个exec*家族的libc调用最终在那里结束,包括execvp。但是,该符号被声明为weak,因此原则上可以用自己的实现替换默认实现。你将如何完成那件事,我留给你决定。

相关内容

  • 没有找到相关文章

最新更新