0Pricing
Zig Academy · บทเรียน

ไบนารีแบบสแตติกและ musl

ส่งมอบไฟล์ปฏิบัติการที่ทำงานได้ในตัว

ไบนารีแบบสแตติกและ musl เป็นบทเรียน Zig Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Zig Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

ความหมายของสแตติก

ไบนารีแบบ สแตติก จะรวมไลบรารีไว้ภายในไฟล์ปฏิบัติการ จึงทำงานได้โดยไม่ขึ้นอยู่กับไลบรารีที่ติดตั้งอยู่บนเครื่องเป้าหมาย

ไดนามิกกับสแตติก

ไบนารีแบบไดนามิกจะโหลดไลบรารีร่วมขณะทำงาน ส่วนแบบสแตติกจะพกไลบรารีเหล่านั้นมาด้วย แลกกับไฟล์ที่ใหญ่ขึ้นแต่มี การพึ่งพา น้อยลง

เหตุใด glibc จึงไม่เหมาะกับการลิงก์แบบสแตติก

ไลบรารี C ของ gnu หรือ glibc ลิงก์แบบสแตติกอย่างสมบูรณ์ได้ยาก และอาจทำงานผิดพลาดบนระบบที่ใช้ glibc คนละเวอร์ชัน

musl ช่วยแก้ปัญหา

ไลบรารี C musl มีขนาดเล็กและลิงก์เข้ากับไบนารีแบบสแตติกได้เรียบร้อย จึงเป็น ABI ที่นิยมใช้สำหรับบิลด์ Linux แบบพกพา

เลือก musl ในทริปเพิล

เลือก musl โดยตั้งค่าให้เป็นฟิลด์ ABI เมื่อ -target ลงท้ายด้วย musl แล้ว Zig จะลิงก์ไลบรารี C ที่เหมาะกับการสร้างแบบสแตติก

zig build-exe main.zig -target x86_64-linux-musl

มักเป็นสแตติกโดยค่าเริ่มต้น

สำหรับเป้าหมาย Linux ที่ใช้ musl Zig จะลิงก์ libc แบบ สแตติก โดยค่าเริ่มต้น ดังนั้นไฟล์ปฏิบัติการที่ได้จึงทำงานได้ด้วยตัวเองอยู่แล้ว

ตรวจสอบด้วย ldd

ตรวจสอบผลงานบน Linux ด้วย ldd ไบนารีแบบสแตติกจริงจะแจ้งว่าไม่ใช่ไฟล์ปฏิบัติการแบบไดนามิก

ldd app

ทำงานได้ทุกที่บน Linux

ไบนารีแบบสแตติกที่ใช้ musl สามารถคัดลอกไปยังเครื่อง Linux เกือบทุกเครื่องแล้วทำงานได้ แม้แต่คอนเทนเนอร์แบบมินิมอล เพราะไม่ต้องใช้ libc ภายนอก

เหมาะสำหรับคอนเทนเนอร์

ไบนารีแบบสแตติกเหมาะอย่างยิ่งกับอิมเมจขนาดเล็ก คุณสามารถใส่ไบนารีเพียงไฟล์เดียวลงในคอนเทนเนอร์แบบ scratch ที่ไม่มีไลบรารีของระบบ แล้วไบนารีก็ยัง ทำงาน ได้

คำนึงถึงข้อแลกเปลี่ยน

ไฟล์แบบสแตติกมีขนาดใหญ่กว่าและพก libc ของตัวเองมา ดังนั้นเมื่อมีการแก้ไขด้านความปลอดภัยในไลบรารี คุณต้อง สร้างใหม่ เพื่ออัปเดต

ลดขนาดด้วย ReleaseSmall

เพื่อลดผลกระทบจากขนาดที่ใหญ่ขึ้น ให้สร้างในโหมด ReleaseSmall ซึ่งปรับไบนารีแบบสแตติกให้มีขนาดเล็กที่สุดเท่าที่ทำได้

zig build-exe main.zig -target x86_64-linux-musl -O ReleaseSmall

ตรวจสอบอย่างรวดเร็ว

ลองนึกย้อนดูว่า Zig ใช้ไลบรารี C ใดคู่กับไบนารี Linux แบบสแตติกที่พกพาได้

สรุป

คุณได้เรียนรู้ว่า ไบนารีแบบสแตติก จะรวมไลบรารีไว้ภายใน และการกำหนดเป้าหมายเป็น musl จะทำให้ได้ไฟล์ปฏิบัติการ Linux ที่พกพาได้และไม่ต้องพึ่งพาสิ่งอื่น 📦

คำถามที่พบบ่อย

บทเรียน “ไบนารีแบบสแตติกและ musl” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ไบนารีแบบสแตติกและ musl” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Zig Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Zig Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ไบนารีแบบสแตติกและ musl”

ส่งมอบไฟล์ปฏิบัติการที่ทำงานได้ในตัว คุณปฏิบัติ Zig Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Zig Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Zig Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “ไบนารีแบบสแตติกและ musl” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Zig Academy นี้ได้ไหม

ได้ บทเรียน Zig Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เป้าหมายและทริปเปิล -target
  2. สร้างโปรแกรมสำหรับ Linux, macOS และ Windows
  3. การคอมไพล์ข้ามแพลตฟอร์มสำหรับ C ด้วย zig cc
  4. ไบนารีแบบสแตติกและ musl
← กลับไปที่ Zig Academy