语境:
去1.2,ubuntu 12.10
目标:
减少已编译二进制文件的大小
目前在我的构建过程中,我运行"go install"来生成二进制文件.我从某个地方读到,如果我传入-w它会收缩二进制文件.我尝试将它传递给-ldflags选项&我的二进制文件丢失了1MB的大小.
-w标志记录在哪里吗?它实际上做了什么?strip -s <binary>命令,然后在上面运行-w了另一个减重750KB!生成的二进制文件运行正常 剥离会在任何情况下造成问题吗?Rus*_*Cox 24
如果使用-ldflags'-w -s'进行编译,您将获得最小的二进制文件.-w关闭DWARF调试信息:您将无法在二进制文件上使用gdb来查看特定函数或设置断点或获取堆栈跟踪,因为不会包含gdb所需的所有元数据.您也将无法使用其他依赖于信息的工具,例如pprof profiling.-s关闭Go符号表的生成:您将无法使用'go tool nm'列出二进制文件中的符号.Strip -s就像将-s传递给-ldflags,但它并没有那么多.在'strip -s'之后,'Go tool nm'可能仍然可以工作.我不完全确定.
这些都不是 - 不是-ldflags -w,而不是-ldflags -s,而不是strip -s - 应该影响实际程序的执行.它们只影响您是否可以使用其他工具调试或分析程序.
这样go help build说
-ldflags 'flag list'
arguments to pass on each 5l, 6l, or 8l linker invocation.
Run Code Online (Sandbox Code Playgroud)
因此,我们可以调用go tool 6l以查看所有选项.其中之一是
-w disable DWARF generation
Run Code Online (Sandbox Code Playgroud)
顺便说一句,5l代表ARM($GOARCH = arm),6l代表x86-64($GOARCH = amd64),8l代表x86($GOARCH = 386).
如果您真的想查看原始DWARF信息,您应该dwarfdump -a在OS X和objdump -wgLinux上使用.警告!输出将很长很长.
你可以从 go tool link
$ go tool link
...
-s disable symbol table
-w disable DWARF generation
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3272 次 |
| 最近记录: |