返回顶部
首页 > 资讯 > 后端开发 > GO >在 golang 中创建静态二进制文件所需的标志
  • 892
分享到

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

2024-04-04 23:04:20 892人浏览 泡泡鱼
摘要

编程网今天将给大家带来《在 golang 中创建静态二进制文件所需的标志》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习Golang或者已经是大佬级别了,都非常欢迎也希

编程网今天将给大家带来《在 golang 中创建静态二进制文件所需的标志》,感兴趣的朋友请继续看下去吧!以下内容将会涉及到等等知识点,如果你是正在学习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"' 都是必需的?

这两个选项都不会创建静态二进制文件吗? (即二进制文件在其运行环境中完全不需要任何库?)


解决方案


在我们开始之前,russ cox 的提醒:Comment

也请阅读此内容:Comment

是的,我同意 volker 的评论,即某些系统实际上不允许静态二进制文件。

继续阅读:Compile packages and dependencies

-a
    force rebuilding of packages that are already up-to-date.

-ldflags '[pattern=]arg list'
    arguments to pass on each go tool link invocation.

阅读:go tool link

-extldflags flags
    Set space-separated flags to pass to the external linker.

因此,它尝试在禁用 cgo 的情况下重建所有包(以及依赖项),并且 -static 意味着不链接共享库。

一些与静态链接相关的点解释得很好:Linking golang statically

终于介绍完啦!小伙伴们,这篇关于《在 golang 中创建静态二进制文件所需的标志》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~编程网公众号也会发布Golang相关知识,快来关注吧!

您可能感兴趣的文档:

--结束END--

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

本文链接: https://lsjlt.com/news/596040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作