亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 ldflags 選項傳入 go 命令時 w 標志是什么意思?

通過 ldflags 選項傳入 go 命令時 w 標志是什么意思?

Go
米琪卡哇伊 2021-07-30 13:01:06
語境:轉到 1.2,Ubuntu 12.10目標:減少已編譯二進制文件的大小目前在我的構建過程中,我運行“go install”來生成二進制文件。我從某處讀到,如果我傳入-w它將縮小二進制文件。我通過將它傳遞到-ldflags選項中進行了嘗試,我的二進制文件大小丟失了 1MB。這個-w標志在任何地方都有記錄嗎?它實際上有什么作用?然后我發現了這個strip -s <binary>命令并在上面運行它,-w然后又減少了 750KB!生成的二進制文件運行良好。剝離在任何情況下都會引起問題嗎?
查看完整描述

3 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

如果使用 -ldflags '-w -s' 編譯,您將獲得最小的二進制文件。-w 關閉 DWARF 調試信息:您將無法在二進制文件上使用 gdb 來查看特定函數或設置斷點或獲取堆棧跟蹤,因為將不包括 gdb 需要的所有元數據。您也將無法使用依賴于信息的其他工具,例如 pprof 分析。-s 關閉 Go 符號表的生成:您將無法使用“go tool nm”來列出二進制文件中的符號。Strip -s 就像將 -s 傳遞給 -ldflags 一樣,但它并沒有剝離那么多。在 'strip -s' 之后,'Go tool nm' 可能仍然有效。我不完全確定。

這些 - 不是 -ldflags -w,不是 -ldflags -s,不是 strip -s - 都不會影響實際程序的執行。它們僅影響您是否可以使用其他工具調試或分析程序。


查看完整回答
反對 回復 2021-08-02
?
largeQ

TA貢獻2039條經驗 獲得超8個贊

go help build

-ldflags 'flag list'
    arguments to pass on each 5l, 6l, or 8l linker invocation.

所以,我們可以調用go tool 6l來查看它的所有選項。其中之一是

-w  disable DWARF generation

順便說一下,5l代表ARM ( $GOARCH = arm),6l代表x86-64 ( $GOARCH = amd64),8l代表x86 ( $GOARCH = 386)。

如果你真的想查看原始DWARF信息,你應該dwarfdump -a在 OS X 和objdump -wgLinux 上使用。警告!輸出會很長,很長。


查看完整回答
反對 回復 2021-08-02
?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

你可以從 go tool link

$ go tool link
  ...
  -s    disable symbol table
  -w    disable DWARF generation


查看完整回答
反對 回復 2021-08-02
  • 3 回答
  • 0 關注
  • 493 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號