मैक ओएस एक्स द्वारा निष्पादन योग्य और पुस्तकालयों के लिए प्रयुक्त मैक-ओ ऑब्जेक्ट फ़ाइल प्रारूप साझा पुस्तकालयों और गतिशील रूप से लोड किए गए मॉड्यूल के बीच भिन्न होता है । का otool -hv some_file
फ़िलाटाइप देखने के लिए उपयोग करें some_file
।
माच-ओ साझा पुस्तकालयों में फ़ाइल प्रकार होता है MH_DYLIB
और एक्सटेंशन .dylib को ले जाता है। उन्हें सामान्य स्थिर लिंकर झंडे के साथ जोड़ा जा सकता है, उदाहरण के -lfoo
लिए libfoo.dylib। वे -dynamiclib
ध्वज को संकलक को पास करके बनाया जा सकता है । ( -fPIC
डिफ़ॉल्ट है और निर्दिष्ट नहीं किया जाना चाहिए।)
लोड करने योग्य मॉड्यूल को माच-ओ स्पीक में "बंडल्स" कहा जाता है। उनके पास फ़ाइल प्रकार है MH_BUNDLE
। वे कोई भी विस्तार कर सकते हैं; एक्सटेंशन .bundle
की अनुशंसा Apple द्वारा की जाती है, लेकिन अधिकांश पोर्टेड सॉफ़्टवेयर .so
संगतता के लिए उपयोग करता है । आमतौर पर, आप प्लग-इन के लिए बंडल का उपयोग करेंगे जो एक एप्लिकेशन का विस्तार करता है; ऐसी स्थितियों में, बंडल अनुप्रयोग के निर्यात एपीआई तक पहुंच प्राप्त करने के लिए एप्लिकेशन बाइनरी के खिलाफ लिंक करेगा। वे -bundle
ध्वज को संकलक को पास करके बनाया जा सकता है ।
दोनों dylibs और बंडलों को गतिशील रूप से dl
APIs (जैसे dlopen
, dlclose
) का उपयोग करके लोड किया जा सकता है । बंडलों के खिलाफ लिंक करना संभव नहीं है जैसे कि वे साझा पुस्तकालय थे। हालांकि, यह संभव है कि एक बंडल वास्तविक साझा पुस्तकालयों के खिलाफ जुड़ा हुआ है; बंडल लोड होने पर वे स्वचालित रूप से लोड हो जाएंगे।
ऐतिहासिक रूप से, अंतर अधिक महत्वपूर्ण थे। मैक ओएस एक्स 10.0 में, पुस्तकालयों को गतिशील रूप से लोड करने का कोई तरीका नहीं था। Dyld APIs (उदाहरण NSCreateObjectFileImageFromFile
के लिए NSLinkModule
) का एक सेट बंडल को लोड करने और उतारने के लिए 10.1 के साथ पेश किया गया था, लेकिन उन्होंने dylibs के लिए काम नहीं किया। dlopen
बंडलों के साथ काम करने वाली एक अनुकूलता पुस्तकालय 10.3 में जोड़ा गया था; 10.4 में, dlopen
डाइल्ड का मूल हिस्सा होने के लिए फिर से लिखा गया और लोडिंग (लेकिन उतराई नहीं) के लिए समर्थन जोड़ा गया। अंत में, 10.5 ने dlclose
डाइलिब के साथ उपयोग के लिए समर्थन जोड़ा और डाइल्ड एपीआई को हटा दिया।
लिनक्स जैसी ईएलएफ प्रणालियों पर, दोनों एक ही फ़ाइल प्रारूप का उपयोग करते हैं ; साझा कोड के किसी भी टुकड़े का उपयोग पुस्तकालय के रूप में और गतिशील लोडिंग के लिए किया जा सकता है।
अंत में, ध्यान रखें कि मैक ओएस एक्स में, "बंडल" एक मानकीकृत संरचना के साथ निर्देशिकाओं को भी संदर्भित कर सकता है जो निष्पादन योग्य कोड और उस कोड द्वारा उपयोग किए गए संसाधनों को रखता है। कुछ वैचारिक ओवरलैप हैं (विशेष रूप से प्लग-इन जैसे "लोड करने योग्य बंडलों" के साथ, जिसमें आमतौर पर मच-ओ बंडल के रूप में निष्पादन योग्य कोड होता है), लेकिन उन्हें ऊपर चर्चा किए गए मच-ओ बंडलों के साथ भ्रमित नहीं होना चाहिए।
अतिरिक्त संदर्भ: