我们正在将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会产生动态链接,而有时是静态链接。愿意提供更多细节。
以下是编译方式:
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会产生动态链接,而有时是静态链接。愿意提供更多细节。
CGO_ENABLED=1
没有任何影响。 - JimBCGO_ENABLED=0
的二进制文件,那么您使用原始的go build
命令想要实现什么目标呢?(原始命令看起来像是随意拼凑在一起的组合) - JimBCGO_ENABLED=0
并不能“神奇地”实现它,它只是防止使用cgo,从而产生一个静态二进制文件,这似乎是你想要的。 - JimB