在遵循此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
文件合并到一个档案中
答案 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")