รูปแบบไฟล์ออบเจ็กต์ Mach-O ที่ใช้โดย Mac OS X สำหรับไฟล์ที่เรียกใช้งานได้และไลบรารี่แยกระหว่างไลบรารีที่แชร์และโมดูลที่โหลดแบบไดนามิก ใช้เพื่อดูไฟล์ของotool -hv some_file
some_file
ไลบรารีที่แบ่งใช้ Mach-O มีประเภทไฟล์MH_DYLIB
และมีนามสกุล. dylib พวกเขาสามารถเชื่อมโยงกับธงคง linker ปกติเช่น-lfoo
libfoo.dylib สามารถสร้างได้โดยการส่ง-dynamiclib
แฟล็กไปยังคอมไพเลอร์ ( -fPIC
เป็นค่าเริ่มต้นและไม่จำเป็นต้องระบุ)
โมดูลที่โหลดได้เรียกว่า "การรวมกลุ่ม" ใน Mach-O พูด MH_BUNDLE
พวกเขามีประเภทของไฟล์ พวกเขาสามารถขยายใด ๆ .bundle
Apple แนะนำให้ใช้ส่วนขยายแต่ซอฟต์แวร์ที่พอร์ตส่วนใหญ่ใช้.so
เพื่อความเข้ากันได้ โดยทั่วไปคุณจะใช้ชุดข้อมูลสำหรับปลั๊กอินที่ขยายแอปพลิเคชัน ในสถานการณ์เช่นนี้ชุดข้อมูลจะเชื่อมโยงกับไบนารีแอปพลิเคชันเพื่อเข้าถึง API ที่ส่งออกของแอปพลิเคชัน สามารถสร้างได้โดยการส่ง-bundle
แฟล็กไปยังคอมไพเลอร์
ทั้งสอง dylibs และการรวมกลุ่มสามารถโหลดแบบไดนามิกโดยใช้dl
APIs (เช่นdlopen
, dlclose
) ไม่สามารถลิงก์กับบันเดิลเหมือนกับว่าเป็นไลบรารีที่แบ่งใช้ อย่างไรก็ตามเป็นไปได้ที่มัดเชื่อมโยงกับไลบรารีที่แชร์จริง จะถูกโหลดโดยอัตโนมัติเมื่อโหลดมัด
ความแตกต่างมีความสำคัญมากกว่า ใน Mac OS X 10.0 ไม่มีวิธีในการโหลดไลบรารีแบบไดนามิก ชุดของ API dyld (เช่นNSCreateObjectFileImageFromFile
, NSLinkModule
) ได้รับการแนะนำให้รู้จักกับ 10.1 ในการโหลดและยกเลิกการรวมกลุ่ม แต่พวกเขาไม่ได้ทำงานให้ dylibs dlopen
ห้องสมุดเข้ากันได้ที่ทำงานร่วมกับการรวมกลุ่มที่ถูกเพิ่มเข้ามาใน 10.3; ใน 10.4 dlopen
มีการเขียนใหม่เพื่อเป็นส่วนดั้งเดิมของ dyld และเพิ่มการรองรับสำหรับการโหลด (แต่ไม่โหลด) dylibs ในที่สุด 10.5 เพิ่มการสนับสนุนสำหรับการใช้dlclose
กับ dylibs และเลิกใช้ API ของ dyld
ในระบบเอลฟ์เช่น Linux, ทั้งใช้รูปแบบไฟล์เดียวกัน ; รหัสที่ใช้ร่วมกันใด ๆ สามารถใช้เป็นห้องสมุดและสำหรับการโหลดแบบไดนามิก
ท้ายที่สุดโปรดทราบว่าใน Mac OS X "มัด" ยังสามารถอ้างถึงไดเรกทอรีที่มีโครงสร้างมาตรฐานที่เก็บรหัสที่ปฏิบัติการได้และทรัพยากรที่ใช้โดยรหัสนั้น มีแนวคิดทับซ้อนบางอย่าง (โดยเฉพาะกับ "ชุดรวมที่โหลดได้" เช่นปลั๊กอินซึ่งโดยทั่วไปจะมีรหัสที่ปฏิบัติการได้ในรูปแบบของชุดมัด Mach-O) แต่พวกเขาไม่ควรสับสนกับชุดรวม Mach-O ที่กล่าวถึงข้างต้น
การอ้างอิงเพิ่มเติม: