gpt4 book ai didi

go - 如何静态链接使用 crypto/tls 的 Go 二进制文件?

转载 作者:IT王子 更新时间:2023-10-29 01:18:28 25 4
gpt4 key购买 nike

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

package main

import _ "crypto/tls"

func main() {

}

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

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

最佳答案

crypto/tls 使用 cgo 的唯一操作系统是 darwin,它需要调用 FetchPEMRoots 来获取根 CA。

你的程序使用 cgo 的原因是因为 crypto/tls 导入了 net 包,它默认链接到主机解析器。您可以使用“netgo”构建标记在不使用 cgo 的情况下构建 net 包。

go build -tags netgo

或者,如果您使用的是默认情况下不会构建 std lib 包的发行版,您可以触发它们使用新的安装后缀进行编译

go build -installsuffix netgo -tags netgo

由于您不需要或没有能力在您的环境中使用 cgo,您可能只想使用 CGO_ENABLED=0 构建所有内容以完全禁用 cgo。

关于go - 如何静态链接使用 crypto/tls 的 Go 二进制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34839897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com