gpt4 book ai didi

go - CGO_ENABLED 如何影响动态与静态链接?

转载 作者:行者123 更新时间:2023-12-01 20:22:11 29 4
gpt4 key购买 nike

我们正在编译我们的 Go 代码以在 docker 上运行,并且我们正在调查为什么我们的二进制文件没有执行。我们发现它缺少一些动态库(尽管我们需要静态链接的二进制文件)。
这就是它的编译方式。env GOOS=linux CGO_ENABLED=1 GO111MODULE=on GOPRIVATE=github.com/ourrepo GOPROXY=https://proxy.golang.org go build --installsuffix cgo --ldflags='-extldflags=-static' -o program main.go使用 相同使用 CGO_ENABLED=0 构建命令最终解决了这个问题,并且输出二进制文件是静态链接的。
现在奇怪的是我们有另一个程序正在使用 相同的构建命令 ,这次是 CGO_ENABLED=1并且...它是静态链接的!
所以我很困惑为什么在某些情况下CGO_ENABLED=1产生动态链接,有时也产生静态链接。很高兴提供更多细节。

最佳答案

一些 Go 包在底层使用 CGO,利用(非常)通用的 C 库来实现跨环境和运行时遇到的边缘情况的更广泛的兼容性。
这些通用库可以在大多数主要的操作系统发行版中找到 - 但显然不包含在 Scratch 镜像中(本质上是完全空的)。CGO_ENABLED默认设置为 1,这意味着必须使用 CGO_ENABLED=0 显式禁用它避免它,即使使用 -static旗帜。

关于go - CGO_ENABLED 如何影响动态与静态链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62817082/

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