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

时间:2015-10-20 05:39:33

标签: 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$

对于什么是错误的任何建议?

2 个答案:

答案 0 :(得分:3)

在使用netos/user等软件包时,仍可动态链接到某些共享库函数。

进一步减少net包的这些要求:https://golang.org/doc/go1.5#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/

答案 1 :(得分:0)

我正在接受@DaveCheney在其他地方建议的答案:

如果您想要静态编译,那么我建议安装Go from 源

env CGO_ENABLED = 0 ./all.bash

这将永久禁用cgo。