使用wasmtime运行wasm文件时无法调用函数

问题描述 投票:0回答:1

Mozilla共享WASI,以及如何使用Wasmtime在其blog post中运行。wasm文件。他们演示的编程语言是Rust

#[wasm_bindgen]
pub fn render(input: &str) -> String {
    let parser = Parser::new(input);
    let mut html_output = String::new();
    html::push_html(&mut html_output, parser);
    return html_output;
}

但是,我想在C中做同样的事情。

我已经下载了wasi-libc,并尝试使用Clang构建一个“ hello world”程序。

我在test.c中创建了两个函数:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int foo1()
{
    printf("Hello foo1()\n");
    return 0;
}

int foo2(char* filename)
{
    printf("Hello foo2()\n");
    printf("filename is %s\n", filename);
    return 0;
}

使用命令构建它:

clang --target=wasm32-wasi --sysroot=/mnt/d/code/wasi-libc/sysroot test.c -o test.wasm -nostartfiles -Wl,--no-entry,--export=foo1,--export=foo2

运行wasm文件以调用功能:

$ wasmtime test.wasm --invoke foo1
Hello foo1()
warning: using `--render` with a function that returns values is experimental and may break in the future
0

$ wasmtime test.wasm --invoke foo2 "hello"
warning: using `--render` with a function that takes arguments is experimental and may break in the future
error: failed to process main module `test.wasm`
    caused by: invalid digit found in string

我无法使用输入参数调用该函数。

Rust和C有什么区别? Rust目前是构建wasm lib文件的唯一方法吗?

c webassembly wasi wasmtime
1个回答
0
投票

所不同的是,Rust工具链具有对接口类型的实验性支持,但是遗憾的是,C还不存在。 #[wasm_bindgen]函数上方的renderrender转换为使用接口类型绑定导出的函数。

© www.soinside.com 2019 - 2024. All rights reserved.