英文:
Golang executable size
问题
我已经搜索了关于构建紧凑的Go可执行文件的最新信息,但没有成功。大部分信息似乎都是几年前的。
我的程序是在Rosettacode.org上找到的标准的Hello World程序。使用Fortran编译后,得到的exe文件大小不到100 KB。而使用Go编译后,得到的exe文件大小高达2400 KB。
我的问题是:是否有编译器开关或编译指令我应该使用?是否有其他工具或技巧我不知道(我是Go的初学者)?关于可执行文件大小,Go的未来计划是什么?在Linux下情况如何?在大型程序中,exe文件会发生什么变化?
背景信息:我正在使用安装在Windows 7上的Go 1.5。我的项目是编写(实际上是从其他语言迁移)一些命令行程序。拥有20个或更多的大型Go可执行文件会占用很多空间。好吧,我知道空间很便宜,所以我可以接受。然而,我相信对这个问题的澄清将会帮助很多人。
英文:
I've searched for recent information on building compact Go executables, without success. Most information appears to be several years old.
My program: the standard hello world as found on Rosettacode.org.
With Fortran I get an exe file under 100 KB. With Go the exe file is whopping 2400 KB.
My questions: are there compiler switches or pragmas that I should be using? Are there other tools or tricks I am not aware of (I am a beginner with Go). What are the future plans for Go regarding executable size? What is it like under Linux - same thing? What happens to exe files on large programs?
Background: I'm using go 1.5 installed on Windows 7. My project is writing (actually migrating from other languages) some command line programs. Having 20 or more large Go exe files eats up a lot of space. OK, I know space is cheap so I can live with it. However, I believe clarity on the matter will help many people.
答案1
得分: 4
一个Go程序之所以庞大,是因为它包含了垃圾回收代码、goroutine调度代码,除此之外几乎所有的库都是静态链接的。这是设计上的选择。
英文:
A Go program is big because it contains garbage collaction code, goroutine scheduling code and besides that it has nearly all libraries statically linked. It is so by design.
答案2
得分: 3
为了减小可执行文件的大小,你可以通过以下方式指示链接器去除调试符号:
go install -ldflags '-s'
go install -ldflags '-s -w'
我在一个相当大的可执行文件(GXUI示例之一)上尝试了这个方法,将文件大小从约16M减小到约10M。添加-w到-s没有任何区别,但是请注意,效果因人而异...
这里是所有链接器选项的完整列表。
英文:
To reduce the executable size, you can instruct the linker to strip debug symbols by using one of the following:
go install -ldflags '-s'
go install -ldflags '-s -w'
I tried it on a fairly large executable (one of the GXUI samples), and this reduced it from ~16M to ~10M. Adding -w to -s didn't make any difference, but as always, your mileage may vary...
Here is a full list of all linker options.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论