Định dạng tệp đối tượng Mach-O được Mac OS X sử dụng cho các tệp thực thi và thư viện phân biệt giữa các thư viện dùng chung và các mô-đun được tải động . Sử dụng otool -hv some_fileđể xem filetype của some_file.
Các thư viện dùng chung Mach-O có loại tệp MH_DYLIBvà mang phần mở rộng .dylib. Chúng có thể được liên kết với các cờ liên kết tĩnh thông thường, ví dụ như -lfoolibfoo.dylib. Chúng có thể được tạo bằng cách chuyển -dynamiclibcờ đến trình biên dịch. ( -fPIClà mặc định và không cần phải được chỉ định.)
Các mô-đun có thể tải được gọi là "gói" trong Mach-O speak. Họ có loại tập tin MH_BUNDLE. Họ có thể mang theo bất kỳ phần mở rộng nào; Phần mở rộng .bundleđược Apple khuyến nghị, nhưng hầu hết các phần mềm được chuyển đều sử dụng .sovì mục đích tương thích. Thông thường, bạn sẽ sử dụng các gói cho các plugin mở rộng ứng dụng; trong các tình huống như vậy, gói sẽ liên kết với tệp nhị phân của ứng dụng để có quyền truy cập vào API đã xuất của ứng dụng. Chúng có thể được tạo bằng cách chuyển -bundlecờ đến trình biên dịch.
Cả hai dylibs và bó có thể được tự động nạp bằng cách sử dụng dlAPI (ví dụ dlopen, dlclose). Không thể liên kết với các gói như thể chúng là các thư viện được chia sẻ. Tuy nhiên, có thể một gói được liên kết với các thư viện chia sẻ thực sự; những cái đó sẽ được tải tự động khi gói được tải.
Trong lịch sử, sự khác biệt có ý nghĩa hơn. Trong Mac OS X 10.0, không có cách nào để tải động các thư viện. Một bộ API dyld (ví dụ NSCreateObjectFileImageFromFile, NSLinkModule) đã được giới thiệu với 10.1 để tải và dỡ các gói, nhưng chúng không hoạt động đối với các dylib. Một dlopenthư viện tương thích làm việc với các gói đã được thêm vào trong 10.3; trong 10,4, dlopenđã được viết lại để trở thành một phần nguyên gốc của dyld và thêm hỗ trợ cho việc tải (nhưng không tải) dylibs. Cuối cùng, 10,5 đã thêm hỗ trợ cho việc sử dụng dlclosevới dylib và không dùng API dyld.
Trên các hệ thống ELF như Linux, cả hai đều sử dụng cùng một định dạng tệp ; bất kỳ đoạn mã được chia sẻ nào cũng có thể được sử dụng làm thư viện và để tải động.
Cuối cùng, hãy lưu ý rằng trong Mac OS X, "gói" cũng có thể tham chiếu đến các thư mục có cấu trúc được tiêu chuẩn hóa chứa mã thực thi và các tài nguyên được sử dụng bởi mã đó. Có một số sự chồng chéo về mặt khái niệm (đặc biệt với "các gói có thể tải" như các plugin, thường chứa mã thực thi dưới dạng gói Mach-O), nhưng chúng không nên bị nhầm lẫn với các gói Mach-O đã thảo luận ở trên.
Tham khảo thêm: