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

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"'

两个选项都不创建静态二进制文件吗?(即,在它们将运行的环境中完全不需要库的二进制文件?)


慕尼黑5688855
浏览 127回答 1
1回答

忽然笑

就在我们开始之前,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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go