Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用WebAssembly和JS将命令行参数传递给C代码?_Javascript_C_Webassembly - Fatal编程技术网

Javascript 如何使用WebAssembly和JS将命令行参数传递给C代码?

Javascript 如何使用WebAssembly和JS将命令行参数传递给C代码?,javascript,c,webassembly,Javascript,C,Webassembly,我正在尝试使用WebAssembly和纯JS在web上运行一些小型C演示,并使用WASI-SDK/WASI libc编译代码: clang--target=wasm32未知wasi--sysroot=-nostartfiles-O3-flto-Wl,--no entry-Wl,--export=malloc-Wl,--export all-Wl,--lto-O3 src.c-o src.wasm 然后我用它来实现WASI函数。这对于使用stdout打印很好,我甚至测试过将字符串和其他类型传递到不

我正在尝试使用WebAssembly和纯JS在web上运行一些小型C演示,并使用WASI-SDK/WASI libc编译代码:

clang--target=wasm32未知wasi--sysroot=-nostartfiles-O3-flto-Wl,--no entry-Wl,--export=malloc-Wl,--export all-Wl,--lto-O3 src.c-o src.wasm

然后我用它来实现WASI函数。这对于使用stdout打印很好,我甚至测试过将字符串和其他类型传递到不同的函数中。但我不知道如何将字符串数组作为参数传递到
main

我不想使用Node或Emscripten,这就是为什么我使用最小的JS实现

编辑:


为了添加命令行参数,我从编译器调用中删除了
-nostartfiles
-Wl,--no entry
,并从WASI标准中实现了
args\u get
args\u size\u get
。从那里,它很简单,只需从wasm的导出函数调用
\u start

如果要使用WASI,那么将args传递给main的方法是实现WASI快照预览1.args\u get和
WASI快照预览1.args\u size\u get
系统调用,WASI程序使用这些系统调用访问argv价值观在这种情况下,您需要调用
\u start
而不是
main


如果你想绕过它,直接调用
main
,你需要在线性内存中分配
char*
指针数组,然后将其作为argv值传递。如果您尝试采用这种方法,您所面临的问题是在调用main之前分配内存(例如通过malloc)很困难。我的建议是使用第一种方法,即调用
\u start
并实现访问
argv
所需的
wasi
syscall。(您也可以调用,然后从您的link命令中删除
-Wl,--no条目)。

我假设它是start,但我不确定。如何指定入口点?删除
-Wl,--no entry
将给出
wasm ld:错误:未定义输入符号(通过--禁止输入):\u start
无需终止,我通过删除
-nostartfiles
-Wl,--no entry
解决了此问题