为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
MYYA 2021-12-07 10:50:32
如果您尝试编译以下 Go 程序:package mainimport _ "crypto/tls"func main() {}你会得到一个动态链接的 Go 二进制文件。这对我来说很烦人(我正在 Docker 容器中构建一个 Go 二进制文件,它使用与我的主机不同的 libc,这将导致二进制文件无法在我的主机上运行)。如何强制Go 静态构建这样一个程序?
查看完整描述

1 回答

?
皈依舞

TA贡献1851条经验 获得超3个赞

唯一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。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 155 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信