从go二进制文件动态构建和链接
我的问题如下:
- 我在机器上有二进制文件
- 从该二进制文件中,我需要编译一个外部.go文件
- 编译后,我需要将编译后的go文件链接到当前二进制文件中,以便可以使用刚刚编译的go代码。
您认为有可能吗?
我做了一些研究,似乎没有可能,但是我可能忽略了一些东西。
谢谢 :)
第一次进入二进制将包含类似
func main() { // Here I need to compile an external go file (or package) which contains
// The definition of runFoo()
// Once the file/package is compiled and linked I need to call the compiled code
runFoo()
// Continue the execution process normally here
}
回答:
新:现在可以在主线Go中执行此操作,请参阅Go执行模式
从Go 1.5发行说明中 :
仅对于amd64体系结构,编译器具有一个新选项-dynlink,该选项通过支持对外部共享库中定义的Go符号的引用来辅助动态链接。
旧答案(其他选项的有用讨论):
当前无法在主行Go中创建动态链接的库*。已经有一些讨论,因此将来可能会看到支持。但是,有一个名为goandroid的第三方go项目需要与您所需的功能相同的功能,因此它们维护的修补程序应允许您对官方的Go代码库进行修补,以支持您所请求的动态链接支持。
如果要使用标准的Go运行时,我建议使用以下方法之一。从其他程序中调用Go程序,并使用以下方法进行通信:
- 管道沟通
- UNIX域套接字
- 共享内存的映射区域。
- 也就是说,在/ dev / shm上创建一个文件,并使两个程序都映射它。
- Go mmap库:https://github.com/edsrzf/mmap-go
每个连续的选项都将花费更多的精力进行设置,具体取决于平台,但可能会比前一个选项更强大。
*注意:即Windows环境中的DLL和UNIX / Linux环境中的.so文件。
以上是 从go二进制文件动态构建和链接 的全部内容, 来源链接: utcz.com/qa/414362.html