Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah kedua-dua `CGO_ENABLED=0` dan `-ldflags \'-extldflags \"-static\"\'` diperlukan untuk mencipta perduaan Go statik?

Mengapakah kedua-dua `CGO_ENABLED=0` dan `-ldflags \'-extldflags \"-static\"\'` diperlukan untuk mencipta perduaan Go statik?

Patricia Arquette
Patricia Arquetteasal
2024-10-28 19:53:29163semak imbas

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

Cara Mencipta Perduaan Statik dalam Go

Apabila membina imej Docker berdasarkan calar, pengguna mungkin menghadapi ralat semasa melaksanakan binari kerana tiada perpustakaan. Ini boleh diselesaikan dengan menetapkan kedua-dua CGO_ENABLED=0 dan -ldflags '-extldflags "-static"' bendera semasa penyusunan.

Mengapa Kedua-dua Bendera Diperlukan?

CGO_ENABLED =0 melumpuhkan penggunaan kod C dalam Go, memastikan binari tidak bergantung pada perpustakaan C luaran.

-ldflags '-extldflags "-static"' mengarahkan pemaut untuk membina binari terpaut secara statik, menghapuskan keperluan untuk perpustakaan kongsi pada persekitaran sasaran.

Walaupun kedua-dua pilihan menyumbang secara individu untuk mencipta perduaan statik, ia mempunyai tujuan yang berbeza:

  • CGO_ENABLED=0 menghalang sebarang pergantungan pada perpustakaan C luaran .
  • -ldflags '-extldflags "-static"' secara khusus memautkan semua perpustakaan berkaitan Go (seperti masa jalan, matematik, dll.) secara statik.

Tanpa -ldflags '- extldflags "-static"', walaupun CGO dilumpuhkan, binari Go masih akan bergantung pada perpustakaan Go kongsi, menyebabkan ralat "tiada fail atau direktori sedemikian" dalam imej Docker berasaskan calar. Oleh itu, menggunakan kedua-dua bendera adalah penting untuk mencipta binari statik yang benar-benar bebas daripada perpustakaan persekitaran sasaran.

Atas ialah kandungan terperinci Mengapakah kedua-dua `CGO_ENABLED=0` dan `-ldflags \'-extldflags \"-static\"\'` diperlukan untuk mencipta perduaan Go statik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn