美文网首页
go编译wasm与调用

go编译wasm与调用

作者: ArtioL | 来源:发表于2022-02-07 17:05 被阅读0次
package main

func main() {
}

// 这里指定导出函数名 后面需要用到


//go:export fib
func Fib(n int) int {
    if n == 0 || n == 1{
        return 1
    }
    var arr = make([]int, n + 1)
    arr[0], arr[1] = 1, 1
    for i := 2;i<=n;i++{
        arr[i] = arr[i - 1] + arr[i - 2]
    }
    return arr[n]
}

编译wasmer-go/wasmer能用的需要使用到tinygo,
安装tinygo

命令行执行编译

tinygo build -o ./module.wasm -target wasi .

module.wasm为导出的文件名

go 调用wasm

package main

import (
    "fmt"
    wasmer "github.com/wasmerio/wasmer-go/wasmer"
    "io/ioutil"
    "time"
)

func main() {
    wasmBytes, _ := ioutil.ReadFile("module.wasm")

    engine := wasmer.NewEngine()
    store := wasmer.NewStore(engine)

    // Compiles the module
    module, err := wasmer.NewModule(store, wasmBytes)
    if err != nil{
        panic(err)
    }

    wasiEnv, _ := wasmer.NewWasiStateBuilder("wasi-program").
        // Choose according to your actual situation
        // Argument("--foo").
        // Environment("ABC", "DEF").
        // MapDirectory("./", ".").
        Finalize()
    // Instantiates the module
    importObject, err := wasiEnv.GenerateImportObject(store, module)
    if err != nil{
        panic(err)
    }
    instance, err := wasmer.NewInstance(module, importObject)
    if err != nil{
        panic(err)
    }
    // Gets the `sum` exported function from the WebAssembly instance.
    fib, _ := instance.Exports.GetFunction("fib")

    // Calls that exported function with Go standard values. The WebAssembly
    // types are inferred and values are casted automatically.
    result, _ := fib(10000)
    st := time.Now()
    fmt.Println(result)
    fmt.Println(time.Since(st).Seconds())
}

执行

go run main.go
image.png

py调用

import pywasm


def fd_write(_: pywasm.Ctx):
    return


vm = pywasm.load("./module.wasm", {'wasi_snapshot_preview1': {
    'fd_write': fd_write
}})

result = vm.exec("fib", [10])


print(result)

相关文章

  • go编译wasm与调用

    编译wasmer-go/wasmer能用的需要使用到tinygo,安装tinygo[https://tinygo....

  • 使用wasm2c反编译wasm代码

    下载wabt代码 编译wabt代码 反编译wasm代码 以反编译eosio.token.wasm为例: 会生成 e...

  • C# 结合 Golang 开发

    1. 实现方式与语法形式 基本方式:将 Go 程序编译成 DLL 供 C# 调用。 1.1 Go代码 注意:代码中...

  • go 协程实现

    [TOC] go 协程执行过程 1. 生成g,并放入队列 用户调用go时,编译器会会调用runtime.newpr...

  • 2019 wasm的hello world

    从网上找了找已有的wasm 0基础教程,内容老旧,过程复杂。目前wasm的编译器emscripten github...

  • 十分钟搞懂WebAssembly

    WASM支持将C/C++/Go/Rust等语言实现的代码编译为浏览器可执行的机器码,从而支持浏览器以接近原生应用的...

  • 2020-12-10

    单独编译 (dokcer manger) 调用命令CGO_ENABLED=1 GOOS=linux go buil...

  • EOSIO开发(三)智能合约---eosiocpp

    eosiocpp是C++生成wasm和abi文件的编译工具,.wasm和.abi文件是EOS智能合约部署需要用到的...

  • solidity 智能合约编译成wasm 和wast

    摘要 1、用solc 将solidity 代码编译成evm 字节码2、用evm2wasm 将evm 转化成wasm...

  • golang go run undefined 同一个packa

    golang中同一个package中函数互相调用的问题 同一个packge中(test) a.go b.go 编译...

网友评论

      本文标题:go编译wasm与调用

      本文链接:https://www.haomeiwen.com/subject/emimkrtx.html