如何静态链接使用加密/tls 的 Go 二进制文件?

如果您尝试编译以下 Go 程序:


package main


import _ "crypto/tls"


func main() {


}

你会得到一个动态链接的 Go 二进制文件。这对我来说很烦人(我正在 Docker 容器中构建一个 Go 二进制文件,它使用与我的主机不同的 libc,这将导致二进制文件无法在我的主机上运行)。


如何强制Go 静态构建这样一个程序?


MYYA
浏览 156回答 1
1回答

皈依舞

唯一crypto/tls使用 cgo 的操作系统是 darwin,它需要调用FetchPEMRoots以获取根 CA。您的程序使用 cgo 的原因是因为crypto/tls导入了net默认情况下链接到主机解析器的包。您可以net使用“netgo”构建标签在没有 cgo的情况下构建包。go build -tags netgo或者,如果您使用的是默认情况下不会构建 std lib 包的版本,则可以触发它们使用新的 installsuffix 进行编译go build -installsuffix netgo -tags netgo由于您不需要或无法在您的环境中使用 cgo,您可能只想构建所有内容以CGO_ENABLED=0完全禁用 cgo。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go