猿问

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

在使用 Go 时,我曾期待一个静态二进制文件。


ubuntu@ugbuildserver:~/gospace$ go build src/runk/runk.go

ubuntu@ugbuildserver:~/gospace$ file runk

runk: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

ubuntu@ugbuildserver:~/gospace$

对什么是错的任何建议?


婷婷同学_
浏览 208回答 2
2回答

LEATH

使用net和 之类的包时,Go 仍然动态链接到一些共享库函数os/user。Go 1.5 进一步降低了对net软件包的这些要求:https : //golang.org/doc/go1.5#netnet 包中的 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/

温温酱

我将采用的答案是@DaveCheney 在其他地方建议的:如果你总是想要静态编译,那么我建议从源代码安装 Go环境 CGO_ENABLED=0 ./all.bash这将永久禁用 cgo。
随时随地看视频慕课网APP

相关分类

Go
我要回答