如果您尝试编译以下 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。
- 1 回答
- 0 关注
- 155 浏览
添加回答
举报
0/150
提交
取消