在使用 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/
温温酱
TA贡献1752条经验 获得超4个赞
我将采用的答案是@DaveCheney 在其他地方建议的:
如果你总是想要静态编译,那么我建议从源代码安装 Go
环境 CGO_ENABLED=0 ./all.bash
这将永久禁用 cgo。
- 2 回答
- 0 关注
- 207 浏览
添加回答
举报
0/150
提交
取消