.dll
বা .so
ভাগ করা libs (রানটাইমের সাথে সংযুক্ত) হয়, .a
এবং .lib
এটি একটি স্থির লাইব্রেরি হয় (সংকলনের সময় সংযুক্ত)। উইন্ডোজ এবং লিনাক্সের মধ্যে এটি কোনও পার্থক্য নয়।
পার্থক্য হ'ল তারা কীভাবে পরিচালিত হয়। দ্রষ্টব্য: পার্থক্য কেবলমাত্র শুল্কের মধ্যে রয়েছে, তারা কীভাবে ব্যবহৃত হয়। লিনাক্স উইন্ডোজ উপায়ে তৈরি করা এবং তদ্বিপরীত পক্ষে খুব কঠিন হবে না, কেবলমাত্র বাস্তবে কেউ এটি করে না।
যদি আমরা একটি ডেল ব্যবহার করি, বা আমরা আমাদের নিজস্ব বাইনারি থেকে কোনও ফাংশন কল করি তবে একটি সহজ এবং সুস্পষ্ট উপায় রয়েছে। উদাহরণস্বরূপ, সি তে আমরা দেখতে পাচ্ছি:
int example(int x) {
...do_something...
}
int ret = example(42);
তবে asm লেভেলে অনেক পার্থক্য থাকতে পারে। উদাহরণস্বরূপ, x86-এ, একটি call
অপকোড কার্যকর করা 42
হয় এবং স্ট্যাকের উপর দেওয়া হয়। বা কিছু রেজিস্টারে। বা কোথাও। কেউ জানেন না যে dll লেখার আগে , এটি কীভাবে ব্যবহৃত হবে। বা প্রকল্পগুলি কীভাবে এটি ব্যবহার করতে চায়, একটি সংকলক (বা কোনও ভাষায়!) দিয়ে লিখিত সম্ভব যা বর্তমানে উপস্থিত নেই (বা এটি ডেল বিকাশকারীদের পক্ষে অজানা)।
উদাহরণস্বরূপ, ডিফল্টরূপে সি এবং প্যাস্কাল উভয়ই স্ট্যাক থেকে আর্গুমেন্টগুলি (এবং ফেরতের মানগুলি পায়) - তবে তারা এটি বিভিন্ন ক্রমে করছে । আপনি কয়েকটি - সংকলক-নির্ভর - অপ্টিমাইজেশান দ্বারা নিবন্ধগুলিতে আপনার ফাংশনগুলির মধ্যে যুক্তি বিনিময় করতে পারেন।
আপনি সঠিকভাবে দেখতে পাচ্ছেন, উইন্ডোজ কাস্টমটি হ'ল একটি ডেল তৈরি করা, আমরা এটির সাথে একটি ন্যূনতম .a
/ তৈরিও .lib
করি। এই সর্বনিম্ন স্ট্যাটিক লাইব্রেরিটি কেবল একটি মোড়ক, এটির মাধ্যমে সেই ডেলের চিহ্নগুলি (ফাংশন) পৌঁছে যায় are এটি প্রয়োজনীয় asm- স্তরের কলিং রূপান্তরগুলি করে।
এর সুবিধাটি হ'ল সামঞ্জস্যতা। এর অসুবিধাটি হ'ল যদি আপনার কাছে মাত্র একটি। ডেল থাকে তবে আপনার ফাংশনগুলি কীভাবে কল করতে চান তা নির্ধারণের জন্য আপনার একটি কঠিন সময় থাকতে পারে। এটি যদি dll এর বিকাশকারী আপনাকে না দেয় তবে.a
dlls এর ব্যবহার হ্যাকিংয়ের কাজ করে । সুতরাং, এটি মূলত বন্ধ হয়ে যাওয়ার উদ্দেশ্যে কাজ করে, উদাহরণস্বরূপ, এসডিকেগুলির জন্য অতিরিক্ত নগদ পাওয়া সহজ।
এর আরেকটি অসুবিধা হ'ল এমনকি আপনি ডায়নামিকাল লাইব্রেরি ব্যবহার করলেও আপনাকে এই ছোট্ট মোড়কে স্থিরভাবে সংকলন করতে হবে।
লিনাক্সে, ডলসের বাইনারি ইন্টারফেসটি স্ট্যান্ডার্ড এবং সি কনভেনশন অনুসরণ করে। সুতরাং, কোন .a
প্রয়োজন নেই এবং ভাগ করা libs মধ্যে বাইনারি সামঞ্জস্য আছে, বিনিময়ে আমাদের মাইক্রোসফ্ট কাস্টম এর সুবিধা নেই।