Format file objek Mach-O yang digunakan oleh Mac OS X untuk executable dan pustaka membedakan antara pustaka bersama dan modul yang dimuat secara dinamis . Gunakan otool -hv some_fileuntuk melihat tipe file dari some_file.
Pustaka bersama Mach-O memiliki tipe file MH_DYLIBdan membawa ekstensi .dylib. Mereka dapat dihubungkan dengan flag tautan statis biasa, misalnya -lfoountuk libfoo.dylib. Mereka dapat dibuat dengan mengirimkan -dynamiclibbendera ke kompiler. ( -fPICadalah default dan tidak perlu ditentukan.)
Modul yang dapat dimuat disebut "bundel" dalam bahasa Mach-O. Mereka memiliki tipe file MH_BUNDLE. Mereka dapat membawa ekstensi apa pun; ekstensi .bundledirekomendasikan oleh Apple, tetapi sebagian besar perangkat lunak porting menggunakan .sodemi kompatibilitas. Biasanya, Anda akan menggunakan bundel untuk plug-in yang memperpanjang aplikasi; dalam situasi seperti itu, bundel akan terhubung dengan biner aplikasi untuk mendapatkan akses ke API yang diekspor aplikasi. Mereka dapat dibuat dengan mengirimkan -bundlebendera ke kompiler.
Baik dylib dan bundel dapat dimuat secara dinamis menggunakan dlAPI (mis. dlopen, dlclose). Tidak mungkin untuk menautkan ke bundel seolah-olah mereka adalah perpustakaan bersama. Namun, ada kemungkinan bahwa bundel terkait dengan perpustakaan bersama nyata; itu akan dimuat secara otomatis ketika bundel dimuat.
Secara historis, perbedaannya lebih signifikan. Di Mac OS X 10.0, tidak ada cara untuk memuat pustaka secara dinamis. Serangkaian API dyld (misalnya NSCreateObjectFileImageFromFile, NSLinkModule) diperkenalkan dengan 10.1 untuk memuat dan membongkar bundel, tetapi mereka tidak bekerja untuk dylibs. Sebuah dlopenperpustakaan kompatibilitas yang bekerja dengan bundel ditambahkan di 10.3; pada 10.4, dlopenditulis ulang menjadi bagian asli dari dyld dan menambahkan dukungan untuk memuat (tetapi tidak menurunkan) dylibs. Akhirnya, 10,5 menambahkan dukungan untuk digunakan dlclosedengan dylibs dan tidak lagi menggunakan API yang sudah digunakan.
Pada sistem ELF seperti Linux, keduanya menggunakan format file yang sama ; setiap bagian dari kode bersama dapat digunakan sebagai perpustakaan dan untuk pemuatan dinamis.
Akhirnya, ketahuilah bahwa di Mac OS X, "bundle" juga dapat merujuk ke direktori dengan struktur standar yang menyimpan kode yang dapat dieksekusi dan sumber daya yang digunakan oleh kode itu. Ada beberapa tumpang tindih konseptual (terutama dengan "bundel yang dapat dimuat" seperti plugin, yang umumnya berisi kode yang dapat dieksekusi dalam bentuk bundel Mach-O), tetapi mereka tidak harus bingung dengan bundel Mach-O yang dibahas di atas.
Referensi tambahan: