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

在 golang 中创建静态二进制文件所需的标志

在 golang 中创建静态二进制文件所需的标志

Go
慕尼黑5688855 2022-06-01 10:41:21
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


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号