Mac OS X tarafından yürütülebilir dosyalar ve kitaplıklar için kullanılan Mach-O nesne dosyası formatı, paylaşılan kitaplıklar ve dinamik olarak yüklenmiş modüller arasında ayrım yapar . otool -hv some_fileÖğesinin dosya türünü görmek için kullanın some_file.
Mach-O paylaşılan kütüphaneleri dosya türüne sahiptir MH_DYLIBve .dylib uzantısını taşır. Bunlar, örneğin -lfoolibfoo.dylib gibi, normal statik bağlayıcı bayrakları ile bağlanabilir. -dynamiclibBayrak derleyiciye geçirilerek oluşturulabilirler . ( -fPICvarsayılan değerdir ve belirtilmesi gerekmez.)
Yüklenebilir modüllere Mach-O konuşmasında "paketler" denir. Dosya türüne sahiptirler MH_BUNDLE. Herhangi bir uzantıyı taşıyabilirler; uzantı .bundleApple tarafından önerilir, ancak çoğu taşınan yazılım .souyumluluk amacıyla kullanır . Genellikle, bir uygulamayı genişleten eklentiler için paketler kullanırsınız ; bu gibi durumlarda, paket uygulamanın dışa aktarılan API'sine erişmek için uygulama ikili dosyasına bağlanır. -bundleBayrak derleyiciye geçirilerek oluşturulabilirler .
Dylibs ve demetleri Hem dinamik kullanılarak yüklenebilir dlAPI'leri (örneğin dlopen, dlclose). Paylaşılan kütüphanelermiş gibi paketler arasında bağlantı kurmak mümkün değildir. Ancak, bir paketin gerçek paylaşımlı kütüphanelere bağlanması mümkündür; bunlar paket yüklendiğinde otomatik olarak yüklenecektir.
Tarihsel olarak, farklılıklar daha anlamlıydı. Mac OS X 10.0'da, kitaplıkları dinamik olarak yüklemenin bir yolu yoktu. Paketleri yüklemek ve boşaltmak için 10.1 ile bir dizi dyld API'si (örn NSCreateObjectFileImageFromFile. NSLinkModule) Sokuldu, ancak dylibs için çalışmadılar. dlopen10.3'te paketlerle çalışan bir uyumluluk kütüphanesi eklendi; 10.4'de, dlopenbir dyld doğal bir parçası ve ilave yükleme için destek (ancak boşaltma) dylibs olması için yeniden. Son olarak, 10.5 dlclosedylibs ile kullanım için destek ekledi ve dyld API'leri kullanımdan kaldırdı.
Linux gibi ELF sistemlerinde her ikisi de aynı dosya biçimini kullanır ; herhangi bir paylaşılan kod parçası kütüphane olarak ve dinamik yükleme için kullanılabilir.
Son olarak, Mac OS X, unutmayın "Gruba" olabilir de yürütülebilir kod ve kod tarafından kullanılan kaynaklar tutan bir standardize yapıyla dizinlere bakın. Bazı kavramsal çakışmalar vardır (özellikle genellikle Mach-O demeti biçiminde yürütülebilir kod içeren eklentiler gibi "yüklenebilir demetler" ile), ancak yukarıda tartışılan Mach-O demetleriyle karıştırılmamalıdır.
Ek referanslar: