SORU
26 ŞUBAT 2010, Cuma


Ne arasındaki farklar .böylece ve .OS X üzerinde dylib?

.dylib) dinamik kütüphane uzantısıdır, ama hiç değil / geleneksel unıx kullanmak gerekmez mi bana anlaşılır gelmedi .paylaşılan nesne.

Ben bazı sorular:

  • Kavramsal bir düzeyde, ne arasındaki en büyük farklar bunlar .böylece ve .dylib?
  • Zaman/ben bir kullanmak gerekir mi?
  • Derleme hileler & ipuçları (o) çalışmıyor beri örneğin, gcc değiştirme-shared -fpıc,)

CEVAP
26 ŞUBAT 2010, Cuma


Mach-O nesne arasında yürütülebilir ve kütüphaneler ayıran biçimi için Mac OS X tarafından kullanılan dosyapaylaşılan kitaplıklarvedinamik olarak yüklenen modüller. otool -hv some_file some_file dosyatipi görmek için kullanın.

Mach-O paylaşılan kitaplıkları dosya türü varMH_DYLIBve uzantısı taşır .dylib. Her zamanki statik linker flags ile karşı -lfoo örneğin libfoo için bağlantılı olabilir.dylib. Derleyici -dynamiclib bayrak geçerek oluşturulabilir. (-fPIC varsayılan ve belirtilmesi gerekmez.)

Yüklenebilir modüller "" Mach-O konuşuyor. demetleri denir Dosya türü varMH_BUNDLE. Herhangi bir uzantısı taşıyabilirler; 7* *uzantısı Apple tarafından tavsiye edilir, ama en taşıdık yazılım uyumluluk için .so kullanır. Genellikle demetleri için kullanacağızeklentilerbir uygulama genişletmek; bu gibi durumlarda, paket uygulama ikili karşı uygulamanın verilen API erişmek için bir bağlantı olacaktır. Derleyici için -bundle bayrak geçerek oluşturulabilir.

Hem dylibs ve paketleri dinamik olarak yüklenen dl API (örneğin dlopen, dlclose) kullanılarak yapılabilir. Eğer paylaşılan kitaplıkları gibi olası demetleri karşı bağlamak için değil. Ancak, bir paket gerçek paylaşılan kitaplıkları karşı bağlı olması mümkündür; bu paket yüklendiğinde otomatik olarak yüklenecek.

Tarihsel olarak, farklılıklar daha önemli. Mac OS X 10.0, dinamik yük kütüphaneleri için bir yolu yoktu. Dyld API (13*,* 14 *örneğin*) 10.1 ile demetleri ve yük kaldırma tanıtıldı, ama dylibs için işe yaramadı. dlopen uyumluluk kütüphanesi ile çalışmış demetleri eklendi 10.3, 10.4, dlopen yazılmış bir yerli parçası dyld ve ilave destek için yükleme (boşaltma) dylibs. Son olarak, 10.5 ekledi dylibs dlclose kullanma desteği ve dyld API onaylanmaz.

ELF Linux gibi sistemler, both use the same file format; paylaşılan kod herhangi bir parça dinamik yükleme için bir kütüphane olarak kullanılabilir.

Son olarak, Mac OS X unutmayın, "bundle"ayrıcaçalıştırılabilir kod ve kaynak kod tarafından kullanılan tutan standart bir yapıya sahip dizinlere bakın. Orada bazı kavramsal örtüşme (özellikle "yüklenebilir paketler" gibi eklentileri, genel olarak içeren çalıştırılabilir kod şeklinde bir Mach-O bundle), ama onlar olmamalı karıştı ile Mach-O demetleri yukarıda açıklanmıştır.

Ek kaynaklar:

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alexander Johnson

    Alexander Jo

    26 Temmuz 2008
  • Codecourse

    Codecourse

    3 ŞUBAT 2009
  • spederson7

    spederson7

    17 Temmuz 2006