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

为什么我的 Go 应用程序没有静态链接?

为什么我的 Go 应用程序没有静态链接?

Go
婷婷同学_ 2021-11-15 20:33:41
在使用 Go 时,我曾期待一个静态二进制文件。ubuntu@ugbuildserver:~/gospace$ go build src/runk/runk.goubuntu@ugbuildserver:~/gospace$ file runkrunk: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not strippedubuntu@ugbuildserver:~/gospace$对什么是错的任何建议?
查看完整描述

2 回答

?
LEATH

TA贡献1936条经验 获得超6个赞

使用net和 之类的包时,Go 仍然动态链接到一些共享库函数os/user

Go 1.5 进一步降低了对net软件包的这些要求:https : //golang.org/doc/go1.5#net

net 包中的 DNS 解析器几乎一直使用 cgo 来访问系统界面。Go 1.5 的变化意味着在大多数 Unix 系统上 DNS 解析将不再需要 cgo,这简化了在这些平台上的执行。现在,如果系统的网络配置允许,本地 Go 解析器就足够了。这种变化的重要影响是每个 DNS 解析都占用一个 goroutine 而不是一个线程,因此有多个未完成的 DNS 请求的程序将消耗更少的操作系统资源。

高级阅读:http : //dominik.honnef.co/posts/2015/06/statically_compiled_go_programs__always__even_with_cgo__using_musl/


查看完整回答
反对 回复 2021-11-15
?
温温酱

TA贡献1752条经验 获得超4个赞

我将采用的答案是@DaveCheney 在其他地方建议的:

如果你总是想要静态编译,那么我建议从源代码安装 Go

环境 CGO_ENABLED=0 ./all.bash

这将永久禁用 cgo。


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信