pka*_*mol 7 compilation build go
我正在构建一个 Docker 镜像作为scratch基础。
以下构建命令:
RUN go build -o /go/bin/myapp
Run Code Online (Sandbox Code Playgroud)
创建了一个执行时一直失败的二进制文件:
standard_init_linux.go:211: exec user process caused "no such file or directory"
Run Code Online (Sandbox Code Playgroud)
通过反复试验,我发现我需要构建如下:
RUN CGO_ENABLED=0 go build -o /go/bin/myapp -a -ldflags '-extldflags "-static"' .
Run Code Online (Sandbox Code Playgroud)
为什么两者都是CGO_ENABLED=0 且 -ldflags '-extldflags "-static"'必要的?
这两个选项都不会创建静态二进制文件吗?(即二进制文件在其运行环境中完全不需要任何库?)
在我们开始之前,拉斯·考克斯 (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.
Run Code Online (Sandbox Code Playgroud)
阅读:go 工具链接
-extldflags flags
Set space-separated flags to pass to the external linker.
Run Code Online (Sandbox Code Playgroud)
因此,它尝试在禁用 CGO 的情况下重建所有包(以及依赖项),并且也-static意味着不链接共享库。
与静态链接相关的一些要点解释得很好:Linking golang statically
| 归档时间: |
|
| 查看次数: |
15590 次 |
| 最近记录: |