如何在Go中建立靜態二進位檔案
基於scratch建置Docker映像時,使用者在執行二進位檔案時可能會遇到錯誤,因為缺少圖書館。這可以透過在編譯期間設定 CGO_ENABLED=0 和 -ldflags '-extldflags "-static"' 標誌來解決。
為什麼這兩個標誌都是必要的?
CGO_ENABLED =0 禁止在 Go 中使用 C 程式碼,確保二進位檔案不依賴外部 C 函式庫。
-ldflags '-extldflags "-static"' 指示連結器建立靜態連結的二進位文件,消除目標環境上對共享庫的需求。
雖然這兩個選項都有助於創建靜態二進位文件,但它們有不同的用途:
不帶-ldflags '- extldflags "-static"',即使CGO 被停用,Go 二進位檔案仍然會依賴共享的Go 庫,導致基於暫存的Docker 映像出現「沒有這樣的文件或目錄”錯誤。因此,使用這兩個標誌對於創建獨立於目標環境庫的真正靜態二進位至關重要。
以上是為什麼建立靜態 Go 二進位檔案需要 `CGO_ENABLED=0` 和 `-ldflags \'-extldflags \'-static\'\'` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!