首页 >后端开发 >Golang >如何将外部 Go 代码动态链接到现有的 Go 二进制文件?

如何将外部 Go 代码动态链接到现有的 Go 二进制文件?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-04 22:16:14786浏览

How Can I Dynamically Link External Go Code into an Existing Go Binary?

Go 二进制文件中的动态链接

问题:

考虑一个场景,您有现有的 Go 二进制文件,需要通过编译外部 Go 文件来添加功能。编译后,您希望将这些新代码集成到二进制文件中,而不需要重建整个应用程序。

解决方案:

在 Go 1.5 及更高版本中,现在可以动态构建和链接共享库。以下是实现所需功能的方法:

  • 创建共享库:
$ go install -buildmode=shared std

此命令将标准库构建为共享库。

  • 编译外部Go文件:

编译外部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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn