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_DYLIB
ve .dylib uzantısını taşır. Bunlar, örneğin -lfoo
libfoo.dylib gibi, normal statik bağlayıcı bayrakları ile bağlanabilir. -dynamiclib
Bayrak derleyiciye geçirilerek oluşturulabilirler . ( -fPIC
varsayı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ı .bundle
Apple tarafından önerilir, ancak çoğu taşınan yazılım .so
uyumluluk 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. -bundle
Bayrak derleyiciye geçirilerek oluşturulabilirler .
Dylibs ve demetleri Hem dinamik kullanılarak yüklenebilir dl
API'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. dlopen
10.3'te paketlerle çalışan bir uyumluluk kütüphanesi eklendi; 10.4'de, dlopen
bir 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 dlclose
dylibs 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: