এক্সিকিউটেবল এবং গ্রন্থাগারগুলির জন্য ম্যাক ওএস এক্স দ্বারা ব্যবহৃত ম্যাচ-ও অবজেক্ট ফাইল ফর্ম্যাটটি ভাগ করা লাইব্রেরি এবং গতিশীল লোড হওয়া মডিউলগুলির মধ্যে পার্থক্য করে । otool -hv some_file
এর ফাইল টাইপ দেখতে ব্যবহার করুন some_file
।
মাচ-ও ভাগ করা লাইব্রেরিতে ফাইল টাইপ থাকে MH_DYLIB
এবং এক্সটেনশনটি বহন করে .dlib। এগুলি সাধারণ স্ট্যাটিক লিঙ্কার পতাকাগুলির সাথে লিঙ্ক করা যেতে পারে, যেমন -lfoo
libfoo.dylib এর জন্য। সংকলকটিতে -dynamiclib
পতাকাটি পাঠিয়ে এগুলি তৈরি করা যেতে পারে । ( -fPIC
এটি ডিফল্ট এবং নির্দিষ্ট করার দরকার নেই))
লোডযোগ্য মডিউলগুলিকে মাচ-ও স্পিকারে "বান্ডিল" বলা হয়। তাদের ফাইল টাইপ আছে MH_BUNDLE
। তারা যে কোনও এক্সটেনশন বহন করতে পারে; .bundle
অ্যাপল দ্বারা এক্সটেনশানটির প্রস্তাব দেওয়া হয়েছে, তবে বেশিরভাগ পোর্ট করা সফ্টওয়্যার .so
সামঞ্জস্যের জন্য ব্যবহার করে । সাধারণত, আপনি প্লাগ-ইনগুলির জন্য বান্ডিলগুলি ব্যবহার করবেন যা কোনও অ্যাপ্লিকেশন প্রসারিত করে; এই পরিস্থিতিতে, বান্ডেল অ্যাপ্লিকেশনটির রফতানি হওয়া API এ অ্যাক্সেস পেতে অ্যাপ্লিকেশন বাইনারিটির সাথে লিঙ্ক করবে। সংকলকটিতে -bundle
পতাকাটি পাঠিয়ে এগুলি তৈরি করা যেতে পারে ।
ডায়ালিব এবং বান্ডিল উভয়ই dl
এপিআই (যেমন dlopen
, dlclose
) ব্যবহার করে গতিশীল লোড করা যায় । বান্ডিলগুলির সাথে লিঙ্ক করা সম্ভব নয় যেমন সেগুলি লাইব্রেরি ভাগ করা হয়েছে। যাইহোক, এটি সম্ভব যে একটি বান্ডিল বাস্তব ভাগ করা লাইব্রেরির সাথে যুক্ত; সেগুলি স্বয়ংক্রিয়ভাবে লোড হবে যখন বান্ডিলটি লোড হবে।
.তিহাসিকভাবে, পার্থক্যগুলি আরও তাত্পর্যপূর্ণ ছিল। ম্যাক ওএস এক্স 10.0-এ, লাইব্রেরিগুলি গতিশীলভাবে লোড করার কোনও উপায় ছিল না। Dyld API গুলি একটি সেট (যেমন NSCreateObjectFileImageFromFile
, NSLinkModule
) লোড এবং আন থোকায় থোকায় থেকে 10.1 সঙ্গে চালু হয়, কিন্তু তারা dylibs জন্য কাজ করে নি। dlopen
10.3.3 এ বান্ডিলগুলির সাথে কাজ করে এমন একটি সামঞ্জস্য লাইব্রেরি যুক্ত হয়েছিল; 10.4-এ, dlopen
ডিল্ডের আদি অংশ হিসাবে পুনরায় লেখা হয়েছিল এবং ডাইলিবগুলি লোড করার জন্য সমর্থন যোগ করা হয়েছিল (তবে আনলোডিং নয়)। অবশেষে, 10.5 dlclose
ডাইলিবগুলি ব্যবহার করার জন্য সমর্থন যুক্ত করেছে এবং ডিল্ড এপিআইগুলিকে অবমূল্যায়ন করেছে।
লিনাক্সের মতো ইএলএফ সিস্টেমে উভয়ই একই ফাইল ফর্ম্যাট ব্যবহার করে ; ভাগ করা কোডের যে কোনও অংশ লাইব্রেরি হিসাবে এবং গতিশীল লোডিংয়ের জন্য ব্যবহার করা যেতে পারে।
অবশেষে, জেনে রাখুন যে ম্যাক OS X এর মধ্যে হতে "বান্ডেল" করতে পারেন এছাড়াও ডিরেক্টরি করার জন্য একটি মান কাঠামোই এক্সিকিউটেবল কোড এবং যে কোড দ্বারা ব্যবহৃত সম্পদ ঝুলিতে সঙ্গে পড়ুন। কিছু ধারণামূলক ওভারল্যাপ রয়েছে (বিশেষত "লোডযোগ্য বান্ডিলগুলি" যেমন প্লাগইনগুলির সাথে, যা সাধারণত ম্যাক-ও বান্ডিল আকারে এক্সিকিউটেবল কোড ধারণ করে) তবে তারা উপরে বর্ণিত মাচ-ও বান্ডিলগুলির সাথে বিভ্রান্ত হওয়া উচিত নয়।
অতিরিক্ত রেফারেন্স: