scratch我正在使用作为基础构建 Docker 映像。以下构建命令:RUN go build -o /go/bin/myapp创建了一个在执行时一直失败的二进制文件:standard_init_linux.go:211: exec user process caused "no such file or directory"通过反复试验,我发现我需要按如下方式构建:RUN CGO_ENABLED=0 go build -o /go/bin/myapp -a -ldflags '-extldflags "-static"' .为什么两者都是必要CGO_ENABLED=0 的? -ldflags '-extldflags "-static"'两个选项都不创建静态二进制文件吗?(即,在它们将运行的环境中完全不需要库的二进制文件?)
1 回答

忽然笑
TA贡献1806条经验 获得超5个赞
就在我们开始之前,Russ Cox 的提醒:评论
也请阅读:评论
是的,我同意 Volker 的评论,即某些系统实际上并不允许静态二进制文件。
继续阅读:编译包和依赖项
-a
force rebuilding of packages that are already up-to-date.
-ldflags '[pattern=]arg list'
arguments to pass on each go tool link invocation.
阅读:去工具链接
-extldflags flags
Set space-separated flags to pass to the external linker.
因此,它会尝试在禁用 CGO 的情况下重建所有包(以及依赖项),也-static意味着不要链接到共享库。
一些与静态链接相关的点解释得很好:Linking golang statically
- 1 回答
- 0 关注
- 126 浏览
添加回答
举报
0/150
提交
取消