第三方库(封闭源)

时间:2019-04-26 18:02:29

标签: go shared-libraries static-libraries

有没有一种方法可以用一堆源文件用go语言构建二进制文件(共享库或静态库),并将其与接口一起分发。

它不是作为可执行文件发布,而是在编译或运行时具有接口的可链接静态或共享库。 (就像在C中一样,您将.a.so文件与头文件一起分发)

与基于开源github的库不同的是,我正在尝试将其移植到Go中。

1 个答案:

答案 0 :(得分:1)

是可以的。您可以将代码构建为静态库,并在运行时使用以下命令将其链接:

go build -buildmode=plugin

您可以使用这样的内置插件:

符号是指向变量或函数的指针。

例如,一个定义为

的插件
package main

import "fmt"

var V int

func F() { fmt.Printf("Hello, number %d\n", V) }

可以加载打开功能,然后可以访问导出的软件包符号V和F

p, err := plugin.Open("plugin_name.so")
if err != nil {
    panic(err)
}
v, err := p.Lookup("V")
if err != nil {
    panic(err)
}
f, err := p.Lookup("F")
if err != nil {
    panic(err)
}
*v.(*int) = 7
f.(func())() // prints "Hello, number 7"


type Symbol interface{}

在go中查看对Plugin的内置支持