4

按照本教程和 github 存储,我了解了插件的使用。

本教程将每个文件分别编译成so文件。

go build -buildmode=plugin -o eng/eng.so eng/greeter.go
go build -buildmode=plugin -o chi/chi.so chi/greeter.go

如何将两个文件合并为一个 .so 文件?我尝试通过空格分隔文件来执行以下命令

go build -buildmode=plugin -o bin/langs.so src/test/eng/greeter.go src/test/chi/greeter.go

错误:

命名文件必须全部在一个目录中;有 src/test/eng/ 和 src/test/chi/

这个想法是拥有来自不同包的单个 .so 文件。

编辑:我想后续问题将是如何将所有.so文件合并到一个存档中,如果一个库有多个包并且.so每个包只允许一个文件。

4

1 回答 1

0

您不能将它们放在不同的文件夹中,因为它们应该具有相同的包名称(主)。但是您可以将它们放在不同的文件中,如下所示:

文件1:

package main

import "fmt"

type greeting_en string

func (g greeting_en) Greet() {
    fmt.Println("Hello Universe")
}


var GreeterEn greeting_en

文件2:

package main

import "fmt"

type greeting_chi string


func (g greeting_chi) Greet() {
    fmt.Println("你好宇宙")
}


var GreeterChi greeting_chi

像这样编译它们:

go build -buildmode=plugin -o ./langs.go 

并像这样加载语言:

mod = "./langs.so"
plug, _ := plugin.Open(mod)
EnglishGreeter,_ := plug.Lookup("GreeterEn")
ChineseGreeter,_ := plug.Lookup("GreeterChi")
于 2019-04-27T06:10:28.917 回答