在rust中调用C中的函数,打包成wasm时无法使用wasmer等运行时运行

写了一个简单的rust调用c的例子

// main.rs
#[link(name = "setsock", kind = "static")]
extern "C" {
    fn my_lib();
}

#[no_mangle]
pub fn test() {
    unsafe {
        my_lib();
    }
}

pub fn main() {
    test();
}

// main.c
#include <stdio.h>

extern void my_lib();

void my_lib() {
    printf("test");
}

// build.rs
use cc;

fn main() {
    cc::Build::new()
        .file("src/main.c")
        // 这里引用的include是c的标准库,是因为在打包时会报错找不到c的头文件,本机没有安装xcode,所以是用的另外下的头文件,手动引入
        .include("src/include")
        .compile("setsock");
}

// Cargo.toml
[package]
name = "rust1"
version = "0.1.0"
edition = "2021"
build = "src/build.rs"

[lib]
crate-type = ['cdylib']

打包命令

cargo build --target=wasm32-wasi

使用wasmer运行

在rust中调用C中的函数,打包成wasm时无法使用wasmer等运行时运行
从错误中可以看到是识别不了我自己写的C库,其不属于wasi标准,所以报错。

查看wasm转为wat的文件

在rust中调用C中的函数,打包成wasm时无法使用wasmer等运行时运行

这个引入为我自己写的C,运行时无法读取,看上去在打包成wasm时并没有把C里面的东西打进去。所以有没有办法将C里面的东西都打到wasm里面去(按照wasi的目标),这样就可以实现在wasmer等运行时中运行。

本机环境

macos big sur 11.5.2

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!