首頁 > 後端開發 > Golang > 為什麼建立靜態 Go 二進位檔案需要 `CGO_ENABLED=0` 和 `-ldflags \'-extldflags \'-static\'\'` ?

為什麼建立靜態 Go 二進位檔案需要 `CGO_ENABLED=0` 和 `-ldflags \'-extldflags \'-static\'\'` ?

Patricia Arquette
發布: 2024-10-28 19:53:29
原創
301 人瀏覽過

Why are both `CGO_ENABLED=0` and `-ldflags '-extldflags

如何在Go中建立靜態二進位檔案

基於scratch建置Docker映像時,使用者在執行二進位檔案時可能會遇到錯誤,因為缺少圖書館。這可以透過在編譯期間設定 CGO_ENABLED=0 和 -ldflags '-extldflags "-static"' 標誌來解決。

為什麼這兩個標誌都是必要的?

CGO_ENABLED =0 禁止在 Go 中使用 C 程式碼,確保二進位檔案不依賴外部 C 函式庫。

-ldflags '-extldflags "-static"' 指示連結器建立靜態連結的二進位文件,消除目標環境上對共享庫的需求。

雖然這兩個選項都有助於創建靜態二進位文件,但它們有不同的用途:

  • CGO_ENABLED=0 防止對外部C 庫的任何依賴.
  • -ldflags '-extldflags "-static"' 專門靜態連結所有Go 相關的函式庫(如執行時間、數學等)。

不帶-ldflags '- extldflags "-static"',即使CGO 被停用,Go 二進位檔案仍然會依賴共享的Go 庫,導致基於暫存的Docker 映像出現「沒有這樣的文件或目錄”錯誤。因此,使用這兩個標誌對於創建獨立於目標環境庫的真正靜態二進位至關重要。

以上是為什麼建立靜態 Go 二進位檔案需要 `CGO_ENABLED=0` 和 `-ldflags \'-extldflags \'-static\'\'` ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板