Go 二进制文件中的动态链接
问题:
考虑一个场景,您有现有的 Go 二进制文件,需要通过编译外部 Go 文件来添加功能。编译后,您希望将这些新代码集成到二进制文件中,而不需要重建整个应用程序。
解决方案:
在 Go 1.5 及更高版本中,现在可以动态构建和链接共享库。以下是实现所需功能的方法:
$ go install -buildmode=shared std
此命令将标准库构建为共享库。
编译外部Go文件如下:
$ go build -linkshared hello.go
编译外部 Go 文件后,可以使用 -linkshared 将其链接到现有的二进制文件标志:
$ go install -linkshared mybinary.go
在现有的二进制文件中,您现在可以像调用中定义的任何其他函数一样调用新编译的代码二进制本身。
示例:
package main import ( "fmt" "github.com/myimportpath/mypackage" ) func main() { fmt.Println("Before calling compiled code") mypackage.RunFoo() fmt.Println("After calling compiled code") }
以上是如何将外部 Go 代码动态链接到现有的 Go 二进制文件?的详细内容。更多信息请关注PHP中文网其他相关文章!