使用来自不同目录的多个文件创建插件

时间:2019-04-27 01:50:06

标签: go go-build

在遵循此tutorial和github repo之后,我了解了插件的使用。

本教程将每个文件分别编译为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文件合并到一个档案中

1 个答案:

答案 0 :(得分:0)

您不能将它们放在不同的文件夹中,因为它们应具有相同的程序包名称(主程序)。但是您可以将它们放在这样的不同文件中:

文件1:

package main

import "fmt"

type greeting_en string

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


var GreeterEn greeting_en

file2:

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 

然后加载这样的lang:

mod = "./langs.so"
plug, _ := plugin.Open(mod)
EnglishGreeter,_ := plug.Lookup("GreeterEn")
ChineseGreeter,_ := plug.Lookup("GreeterChi")