【发布时间】:2020-07-24 11:13:18
【问题描述】:
我正在尝试使用wasi-sdk 在 C 程序中直接调用 WASI 函数 (fd_write)。这是库(lib.c):
#include <stdint.h>
struct Ciovec
{
uint8_t *buf;
uint32_t buf_len;
};
uint16_t fd_write(uint32_t fd, struct Ciovec *iovs_ptr, uint32_t iovs_len, uint32_t *nwritten);
static char *str = "just testing\n";
void c_main()
{
struct Ciovec vec = { .buf = (uint8_t*)str, .buf_len = 13 };
uint32_t nwritten = 0;
fd_write(1, &vec, 1, &nwritten);
}
现在,如果我使用 wasi-sdk 将其构建为静态可链接库
~/wasi-sdk-11.0/bin/clang --sysroot ~/wasi-sdk-11.0/share/wasi-sysroot/ lib.c -c -o lib.o -fpic
我得到了这个 wat:(wasm2wat --enable-all 输出)
(module
(type (;0;) (func))
(type (;1;) (func (param i32 i32 i32 i32) (result i32)))
(import "env" "__linear_memory" (memory (;0;) 1))
(import "env" "__indirect_function_table" (table (;0;) 0 funcref))
(import "env" "__stack_pointer" (global (;0;) (mut i32)))
(import "env" "fd_write" (func (;0;) (type 1)))
...)
现在fd_write 的导入行不正确。据我了解 WASI 函数需要从wasi_snapshot_preview1 或wasi_unstable 导入(我没有第一个的源代码,我只是在开源代码中看到它,第二个见示例@ 987654322@,但我不确定在 C 中该怎么做。有什么想法吗?
【问题讨论】:
标签: c webassembly wasi