উত্তর:
একটি .a
ফাইল একটি স্ট্যাটিক লাইব্রেরি হয়, অন্যদিকে একটি .so
ফাইল উইন্ডোজের ডিএলএল অনুরূপ একটি ভাগ করা অবজেক্ট (ডায়নামিক) লাইব্রেরি হয়। এই পৃষ্ঠায় দুজনের মধ্যে পার্থক্য সম্পর্কে কিছু বিশদ তথ্য রয়েছে ।
.a
সংকলনের সময় কেবল কোনও প্রোগ্রামের অংশ হিসাবে অন্তর্ভুক্ত করা যায়। .so
প্রোগ্রাম লোড হওয়ার সময় এর "আমদানি" করা যায়।
ar
ইউটিলিটি ব্যবহার করে তৈরি করা অবজেক্ট ফাইলগুলির একটি সংগ্রহ a এখানে আরও তথ্য
অনুসরণ হিসাবে, একটি .a ফাইল একটি "আর" সংরক্ষণাগার। টারের সংরক্ষণাগারের বিপরীতে নয়, এটি .o বা অবজেক্ট ফাইলগুলি সংরক্ষণ করে, সংরক্ষণাগার থেকে এগুলি টেনে আনে, এবং অন্যান্য জিনিসের মধ্যে একটি প্রোগ্রামে লিঙ্ক করে। আপনি চাইলে অন্যান্য ফাইলগুলি সঞ্চয় করতে আর ব্যবহার করতে পারেন।
উদাহরণস্বরূপ, আপনি টি-টি প্যারামিটারের সাথে আর ফাইলের সদস্যদের একটি তালিকা পেতে পারেন:
ar -t /usr/lib/libc.a
একটি .so ফাইল হ'ল "শেয়ার্ড অবজেক্ট" ফাইল এবং এতে লিঙ্কারের কাছে আরও অনেক তথ্য উপলব্ধ রয়েছে যাতে সদস্যরা যত দ্রুত সম্ভব একটি লোডিং প্রোগ্রামে যুক্ত হতে পারেন।
উদাহরণস্বরূপ, চেষ্টা করুন:
objdump -T /lib/libc-2.11.1.so
(অথবা libc.so এর যে কোনও সংস্করণ আপনার / lib ডিরেক্টরিতে রয়েছে)) নোট করুন। একটি ফাইলের মধ্যে কেবল একটি লিঙ্কার স্ক্রিপ্ট থাকতে পারে যা ফাইল অন্য কোথাও খুঁজে পেতে পারে বা অন্য কিছু ব্যবহার করতে পারে।
মজার বিষয় হল একটি .so ফাইলও একটি পূর্ণাঙ্গ প্রোগ্রাম হতে পারে। উদাহরণস্বরূপ, /lib/libc.so.6 চালানোর চেষ্টা করা হচ্ছে । (দুঃখের বিষয়, শেষের অংশটি আরও আধুনিক সিস্টেমে কাজ করছে বলে মনে হয় না Not এটি বড় ক্ষতি নয়))
ar -t /usr/lib/libc.a
। আসলে -
এই ক্ষেত্রে প্রয়োজনীয় বলে মনে হয় না। এছাড়াও /lib/libc.so.6.
কিছু আউটপুট মুদ্রণ। আমি এটিকে ডাকবো কিনা জানি না full fledged program
।
ldd
.so এর উপরও চালাতে পারেন এবং এটি আপনাকে কী অন্যান্য লাইব্রেরি ব্যবহার করে তা দেখায়। স্ট্যাটিক কোনও বার্তা নিয়ে ফিরে আসবে বলে এটি কোনও ডায়নামিক লাইব্রেরি নয়।