使用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$
对于什么是错误的任何建议?
答案 0 :(得分:3)
在使用net
和os/user
等软件包时,仍可动态链接到某些共享库函数。
进一步减少net
包的这些要求:https://golang.org/doc/go1.5#net
网络包中的DNS解析器几乎总是使用cgo来访问系统界面。 Go 1.5的变化意味着在大多数Unix系统上,DNS解析将不再需要cgo,这简化了在这些平台上的执行。现在,如果系统的网络配置允许,本机Go解析器就足够了。这种变化的重要影响是每个DNS解析都占用了一个goroutine而不是一个线程,因此具有多个未完成的DNS请求的程序将占用更少的操作系统资源。
答案 1 :(得分:0)
我正在接受@DaveCheney在其他地方建议的答案:
如果您想要静态编译,那么我建议安装Go from 源
env CGO_ENABLED = 0 ./all.bash
这将永久禁用cgo。