ডিএলএল ফাইলগুলি আসলে কী এবং তারা কীভাবে কাজ করে?


224

ডিএলএল ফাইলগুলি ঠিক কীভাবে কাজ করে? এগুলির একটি খুব ভয়ঙ্কর বলে মনে হচ্ছে তবে তারা কী বা তারা কীভাবে কাজ করে তা আমি জানি না।

তো, তাদের সাথে কী চুক্তি?


6
যেহেতু এটি শুধুমাত্র উইন্ডোজের সাথে ট্যাগ করা হয়েছে, এবং এই প্রশ্নটি ২০০৮ সালে আবার লেখা হয়েছিল, আজকাল ম্যাক এবং লিনাক্সের উপরও নেট চালানোর চেষ্টা করা উচিত।
জিম আহো

উত্তর:


287

ডিএলএল কী?

ডায়নামিক লিংক লাইব্রেরিগুলি (ডিএলএল) এএসইইএস এর মতো তবে সেগুলি সরাসরি সম্পাদনযোগ্য নয়। এগুলি লিনাক্স / ইউনিক্সের .so ফাইলগুলির মতো। এর অর্থ, ডিএলএল হ'ল এমএসের শেয়ার্ড লাইব্রেরিগুলি বাস্তবায়ন।

ডিএলএলগুলি একটি এএসইএর মতো এতটাই যে ফাইল ফর্ম্যাটটি নিজেই একই। এক্সই এবং ডিএলএল উভয়ই পোর্টেবল এক্সিকিউটেবল (পিই) ফাইল ফর্ম্যাটের ভিত্তিতে। ডিএলএলগুলিতে সিওএম উপাদান এবং। নেট লাইব্রেরি থাকতে পারে।

একটি ডিএলএল কী থাকে?

একটি ডিএলএলে একটি ফাংশন, শ্রেণি, ভেরিয়েবল, ইউআই এবং সংস্থান রয়েছে (যেমন আইকন, চিত্র, ফাইল, ...) যা কোনও এক্সই বা অন্য ডিএলএল ব্যবহার করে।

গ্রন্থাগারের প্রকার:

কার্যত সমস্ত অপারেটিং সিস্টেমে 2 ধরণের গ্রন্থাগার রয়েছে। স্ট্যাটিক লাইব্রেরি এবং গতিশীল লাইব্রেরি। উইন্ডোতে ফাইল এক্সটেনশনগুলি নিম্নরূপ: স্ট্যাটিক লাইব্রেরি (.lib) এবং গতিশীল লাইব্রেরি (.dll)। মূল পার্থক্য হ'ল স্থির গ্রন্থাগারগুলি সংকলনের সময় নির্বাহের সাথে সংযুক্ত থাকে; যদিও গতিশীল সংযুক্ত লাইব্রেরি রান-টাইম না হওয়া পর্যন্ত লিঙ্কযুক্ত নয়।

স্থির এবং গতিশীল লাইব্রেরিতে আরও:

আপনি সাধারণত আপনার কম্পিউটারে স্থির লাইব্রেরি দেখতে পাচ্ছেন না, কারণ একটি স্ট্যাটিক লাইব্রেরি সরাসরি মডিউল (EXE বা DLL) এর ভিতরে এম্বেড থাকে। একটি গতিশীল লাইব্রেরি একটি স্ট্যান্ড-অলোন ফাইল।

একটি ডিএলএল যে কোনও সময় পরিবর্তন করা যেতে পারে এবং কেবল রান টাইমে লোড করা হয় যখন কোনও এক্সই স্পষ্টতই ডিএলএল লোড করে। কোনও স্থির গ্রন্থাগার এটি EXE এর মধ্যে সংকলিত হয়ে গেলে পরিবর্তন করা যায় না। একটি ডিএলএল নিজেই এক্সই আপডেট না করে পৃথকভাবে আপডেট করা যেতে পারে।

একটি ডিএলএল লোড হচ্ছে:

উইন 32 এপিআই লোডলিবারির মাধ্যমে বা যখন এটি অন্য কোনও ডিএলএল নির্ভরতা হয় তখন কোনও প্রোগ্রাম সূচনায় একটি ডিএলএল লোড করে। কোনও প্রোগ্রাম কোনও ফাংশন লোড করতে গেটপ্রোকএড্রেস ব্যবহার করে বা সংস্থান লোড করতে লোডারসোর্স করে।

আরও পড়া:

আরও পড়ার জন্য দয়া করে এমএসডিএন বা উইকিপিডিয়া পরীক্ষা করুন । এছাড়াও এই উত্তর উত্স।


5
সম্ভবত কোথাও আমদানি lib উল্লেখ করা উচিত। ঠিক আছে আমি এখন চলে যাব। :)
অ্যাডাম মিটস

2
সম্বোধন করা বলে মনে হচ্ছে তাদের অপসারণ। আমি এর জন্য কীভাবে পয়েন্ট পেতে পারি? <g>
অ্যাডাম মিটস

36

ডিএলএল কী?

ডিএলএল ফাইলগুলি বাইনারি ফাইল যা এক্সিকিউটেবল কোড এবং ছবি ইত্যাদির মতো সংস্থানীয় সম্পদ ধারণ করতে পারে ইত্যাদি অ্যাপ্লিকেশনগুলির বিপরীতে এগুলি সরাসরি সম্পাদন করা যায় না, তবে কোনও অ্যাপ্লিকেশন এগুলি লোড করে দেবে এবং যখন তাদের প্রয়োজন হবে (বা সমস্ত একবারে প্রারম্ভকালে)।

তারা গুরুত্বপূর্ণ?

বেশিরভাগ অ্যাপ্লিকেশনগুলি প্রারম্ভকালে প্রয়োজনীয় ডিএলএল ফাইলগুলি লোড করবে। এর মধ্যে যদি কোনওটি না পাওয়া যায় তবে সিস্টেমটি প্রক্রিয়াটি একেবারেই শুরু করতে সক্ষম হবে না।

ডিএলএল ফাইলগুলির জন্য অন্যান্য ডিএলএল ফাইলের প্রয়োজন হতে পারে

কোনও অ্যাপ্লিকেশনটির ডিএলএল ফাইলের প্রয়োজন একইভাবে, একটি ডিএলএল ফাইল অন্যান্য ডিএলএল ফাইলের উপর নির্ভরশীল হতে পারে। নির্ভরশীলতার শৃঙ্খলে থাকা এই ডিএলএল ফাইলগুলির মধ্যে যদি একটি খুঁজে পাওয়া যায় না, তবে অ্যাপ্লিকেশনটি লোড হবে না। এই সহজে কোনো নির্ভরতা ভ্রমণকারী সরঞ্জাম ব্যবহার debugged হয়, মত নির্ভরতা ওয়াকার

সিস্টেম ফোল্ডারে তাদের মধ্যে অনেকগুলি রয়েছে

সিস্টেমের বেশিরভাগ কার্যকারিতা ডিএলএল ফাইল আকারে কোনও ব্যবহারকারী প্রোগ্রামের কাছে প্রকাশিত হয় কারণ এগুলি ভাগ করার কোড / সংস্থানগুলির একটি স্ট্যান্ডার্ড ফর্ম। প্রতিটি কার্যকারিতা পৃথক পৃথক ডিএলএল ফাইলগুলিতে রাখা হয় যাতে কেবল প্রয়োজনীয় ডিএলএল ফাইলগুলি লোড হয়ে যায় এবং এভাবে সিস্টেমে মেমরির সীমাবদ্ধতা হ্রাস পায়।

ইনস্টল করা অ্যাপ্লিকেশনগুলি ডিএলএল ফাইলগুলিও ব্যবহার করে

উপরে বর্ণিত হিসাবে ডিএলএল ফাইলগুলি শারীরিকভাবে পৃথক কার্যকারিতা পৃথক করার একটি রূপে পরিণত হয়। ভাল অ্যাপ্লিকেশনগুলি DLL ফাইলগুলি একেবারে প্রয়োজনীয় না হওয়া পর্যন্ত লোড না করার চেষ্টা করে, যা মেমরির প্রয়োজনীয়তা হ্রাস করে। এটিও অনেকগুলি ডিএলএল ফাইল সহ অ্যাপ্লিকেশনগুলি চালিত করে।

ডিএলএল হেল

যাইহোক, ভাগ সময়ে ডিএলএল ফাইলগুলি এবং সেগুলির প্রয়োজনীয় প্রোগ্রামগুলির মধ্যে কোনও সংস্করণ মিল নেই এমন সময়ে সিস্টেম আপগ্রেডগুলি অন্যান্য প্রোগ্রামগুলি প্রায়শই ভেঙে দেয়। সিস্টেম চেকপয়েন্টস এবং ডিএলএল ক্যাশে ইত্যাদি এই সমস্যা সমাধানের জন্য এম from থেকে শুরু হয়েছে। .NET প্ল্যাটফর্মটি সম্ভবত এই সমস্যার মুখোমুখি হবে না।

ডিএলএল ফাইলের মধ্যে কী রয়েছে তা আমরা কীভাবে জানব?

আপনাকে ডাম্পবিন বা ডিপেন্ডেন্সি ওয়াকারের মতো একটি বাহ্যিক সরঞ্জাম ব্যবহার করতে হবে যা কেবলমাত্র জনসমক্ষে দৃশ্যমান ফাংশনগুলি (রফতানি হিসাবে পরিচিত) কেবল ডিএলএল ফাইলগুলির মধ্যে অন্তর্ভুক্ত রয়েছে এবং অন্যান্য ডিএলএল ফাইলগুলির জন্য এটি কী প্রয়োজন এবং কী এই ডিএলএল ফাইলগুলি এই ডিএলএল ফাইল থেকে রফতানি করে তা প্রদর্শন করবে না উপর নির্ভরশীল।

আমরা সেগুলি কীভাবে তৈরি / ব্যবহার করব?

আপনার বিক্রেতার কাছ থেকে প্রোগ্রামিং ডকুমেন্টেশন উল্লেখ করুন। সি ++ এর জন্য, এমএসডিএন- তে লোডলিবারি পড়ুন ।


2
দয়া করে এই বাক্যটি ( "The .NET platform might not face this issue at all.") সম্পূর্ণ করুন । ধন্যবাদ।
জোগি

1
@ রেহান খান .NET ফ্রেমওয়ার্ক v2.0 দিয়ে শুরু করে, রানটাইম কেবল একটি .NET সংস্করণ <= বর্তমানে লোড হওয়া রানটাইম + + দ্বারা নেট সংকলনগুলি লোড করবে N ইতিমধ্যে লোড করা সমাবেশটি ব্যবহার করবে। সব মিলিয়ে, আমি মনে করি এটি বলাই ভাল যে তারা কোনও প্রোগ্রামের রানটাইম কী ডিএলএল চাপিয়ে দেবে তার উপর খুব ভারী বিধিনিষেধ প্রয়োগ করে সমস্যাটি সমাধান করেছে (এটি স্রেফ ছাড়ার আগে এবং আপনার সহায়তার জন্য জিজ্ঞাসা করার আগে)।
ভ্লাদিস্লাভ মার্টিন

14

ধরা যাক আপনি একটি এক্সিকিউটেবল তৈরি করছেন যা কোনও লাইব্রেরিতে পাওয়া কিছু ফাংশন ব্যবহার করে।

আপনি যে লাইব্রেরিটি ব্যবহার করছেন সেটি স্থিতিশীল থাকলে লিঙ্কারটি সরাসরি লাইব্রেরি থেকে এই ফাংশনগুলির জন্য অবজেক্ট কোডটি অনুলিপি করে সম্পাদনযোগ্যতে প্রবেশ করিয়ে দেয়।

এখন যদি এই এক্সিকিউটেবল চালিত হয় তবে এটির প্রয়োজনীয় প্রতিটি জিনিস রয়েছে তাই এক্সিকিউটেবল লোডার কেবল এটিকে স্মৃতিতে লোড করে এবং চালায়।

লাইব্রেরিটি গতিশীল হলে লিঙ্কারটি অবজেক্ট কোডটি সন্নিবেশ করবে না বরং এটি একটি স্টাব sertোকাবে যা মূলত বলে যে এই ফাংশনটি এই ডিএলএলে এই স্থানে অবস্থিত ।

এখন যদি এই এক্সিকিউটেবল চালানো হয় তবে এক্সিকিউটেবলের বিটগুলি অনুপস্থিত (অর্থাত্ স্টাবগুলি) সুতরাং লোডারটি নিখোঁজ স্টাবগুলি নির্বাহের যোগ্য স্থির করে দেয়। সমস্ত স্টাবগুলি সমাধান করার পরে কেবল এক্সিকিউটেবলকে চালানোর অনুমতি দেওয়া হবে।

এটি কার্যকরভাবে দেখতে ডিএলএলকে মুছে ফেলুন বা নামকরণ করুন এবং আপনি যখন এক্সিকিউটেবল চালানোর চেষ্টা করবেন তখন লোডার কীভাবে একটি অনুপস্থিত ডিএলএল ত্রুটিটির প্রতিবেদন করবে তা দেখুন।

তাই ডায়নামিক লিংক লাইব্রেরি নামটি , লিঙ্কিং প্রক্রিয়াটির অংশগুলি এক্সিকিউটেবল লোডার দ্বারা চলমান সময়ে গতিশীলভাবে সম্পন্ন করা হচ্ছে।

একটি চূড়ান্ত নোট, আপনি যদি ডিএলএলে লিঙ্ক না করেন তবে লিঙ্কার দিয়ে কোনও স্টাব inোকানো হবে না, তবে উইন্ডোজ এখনও গেটপ্রোকএড্রেস এপিআই সরবরাহ করে যা আপনাকে এক্সিকিউটেবল শুরু হওয়ার অনেক পরে ডিএলএল ফাংশন এন্ট্রি পয়েন্ট লোড করতে দেয়।


12

ডিএলএল (ডায়নামিক লিংক লাইব্রেরি) এবং এসএলএস (ভাগ করা লাইব্রেরি, ইউএনআইএক্সের অধীনে সমতুল্য) কেবলমাত্র এক্সিকিউটেবল কোডের লাইব্রেরি যা গতিসম্পন্নভাবে লোড সময় একটি এক্সিকিউটেবলের সাথে যুক্ত হতে পারে।

স্থির লাইব্রেরিগুলি সংকলন সময়ে এক্সিকিউটেবলের মধ্যে সন্নিবেশ করা হয় এবং সেদিক থেকে স্থির করা হয়। তারা এক্সিকিউটেবলের আকার বাড়ায় এবং ভাগ করা যায় না।

ডায়নামিক লাইব্রেরিতে নিম্নলিখিত সুবিধা রয়েছে:

1 / এগুলি সংকলনের পরিবর্তে রান সময়ে লোড করা হয় যাতে এক্সিকিউটেবলের থেকে সেগুলি স্বাধীনভাবে আপডেট করা যায় (উইন্ডোয় আপনি যে সমস্ত অভিনব উইন্ডো এবং ডায়ালগ বাক্স দেখেন সেগুলি ডিএলএল থেকে আসে তাই আপনার অ্যাপ্লিকেশনটির চেহারা-অনুভূতি আপনাকে ছাড়াই পরিবর্তন করতে পারে) এটি আবার লিখতে হবে)।

2 / যেহেতু তারা স্বতন্ত্র, কোডটি একাধিক এক্সিকিউটেবলের মধ্যে ভাগ করা যায় - যেহেতু এটি মেমরি সঞ্চয় করে, আপনি যদি একক ডিএলএল দিয়ে 100 টি অ্যাপ চালাচ্ছেন তবে মেমরিতে কেবল ডিএলএলটির একটি অনুলিপি থাকতে পারে।

তাদের প্রধান অসুবিধা হ'ল সুবিধা # 1 - ডিএলএলগুলি আপনার অ্যাপ্লিকেশনটি আলাদা করে রাখার ফলে আপনার অ্যাপ্লিকেশনটি কাজ বন্ধ করতে বা উদ্ভট আচরণ শুরু করতে পারে। ডিএলএল সংস্করণটি উইন্ডোজের অধীনে খুব ভালভাবে পরিচালিত হয় না এবং এটি চূড়ান্তভাবে "ডিএলএল হেল" নামে অভিহিত করে।


11

ডিএলএল ফাইলগুলিতে একটি রফতানি সারণি থাকে যা প্রতীকগুলির একটি তালিকা যা কলিং প্রোগ্রামটি দেখা যায়। প্রতীকগুলি সাধারণত সি কলিং কনভেনশন ( __stcall ) এর সাথে কাজ করে। এক্সপোর্ট টেবিলটিতে ফাংশনের ঠিকানাও রয়েছে।

এই তথ্যের সাথে, কলিং প্রোগ্রামটি তখন DLL এর মধ্যে ফাংশনগুলি কল করতে পারে যদিও এটি সংকলনের সময় DLL এ অ্যাক্সেস না করে।

ডায়নামিক লিংক গ্রন্থাগারগুলির উপস্থাপনে আরও কিছু তথ্য রয়েছে।


6

http://support.microsoft.com/kb/815065

একটি ডিএলএল একটি লাইব্রেরি যাতে কোড এবং ডেটা থাকে যা একই সাথে একাধিক প্রোগ্রাম দ্বারা ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, উইন্ডোজ অপারেটিং সিস্টেমগুলিতে, Comdlg32 DLL সাধারণ ডায়ালগ বাক্স সম্পর্কিত ফাংশন সম্পাদন করে। সুতরাং, প্রতিটি প্রোগ্রাম একটি মুক্ত সংলাপ বাক্স বাস্তবায়নের জন্য এই ডিএলএলে থাকা কার্যকারিতাটি ব্যবহার করতে পারে। এটি কোড পুনরায় ব্যবহার এবং দক্ষ মেমরির ব্যবহার প্রচার করতে সহায়তা করে।

একটি ডিএলএল ব্যবহার করে, একটি প্রোগ্রাম পৃথক উপাদানগুলিতে মডিউলাইজ করা যায়। উদাহরণস্বরূপ, একটি অ্যাকাউন্টিং প্রোগ্রাম মডিউল দ্বারা বিক্রয় করা যেতে পারে। প্রতিটি মডিউল চালিত সময়ে মূল প্রোগ্রামে লোড করা যায় যদি সেই মডিউলটি ইনস্টল থাকে। মডিউলগুলি পৃথক হওয়ার কারণে, প্রোগ্রামটির লোডের সময়টি দ্রুত হয় এবং সেই কার্যকারিতাটির জন্য অনুরোধ করা হলে একটি মডিউল কেবল তখনই লোড হয় is

অতিরিক্ত হিসাবে, আপডেটগুলি প্রোগ্রামের অন্যান্য অংশগুলিকে প্রভাবিত না করে প্রতিটি মডিউলে প্রয়োগ করা সহজ। উদাহরণস্বরূপ, আপনার কাছে বেতনের প্রোগ্রাম থাকতে পারে এবং প্রতি বছর করের হারগুলি পরিবর্তিত হতে পারে। এই পরিবর্তনগুলি যখন কোনও ডিএলএলে বিচ্ছিন্ন হয়, আপনি পুরো প্রোগ্রামটি আবার তৈরি বা ইনস্টল করার প্রয়োজন ছাড়াই একটি আপডেট প্রয়োগ করতে পারেন।

http://en.wikipedia.org/wiki/Dynamic-link_library


2

ডিএলএল একটি ফাইল এক্সটেনশন এবং উইন্ডোজ প্রোগ্রামগুলির জন্য একাধিক কোড এবং পদ্ধতি রাখার জন্য ব্যবহৃত "ডায়নামিক লিঙ্ক লাইব্রেরি" ফাইল ফর্ম্যাট হিসাবে পরিচিত। সফ্টওয়্যার ও গেমস ডিএলএল ফাইলগুলির ঘাঁটিতে চলে; ডিএলএল ফাইলগুলি তৈরি করা হয়েছিল যাতে একাধিক অ্যাপ্লিকেশন একই সাথে তাদের তথ্য ব্যবহার করতে পারে।

যদি আপনি ডিএলএল ফাইলগুলি সম্পর্কে আরও তথ্য পেতে চান বা কোনও ত্রুটির মুখোমুখি নীচের পোস্টটি পড়ুন। https://www.bouncegeek.com/fix-dll-errors-windows-586985/


1

ডিএলএলস (ডায়নামিক লিঙ্ক গ্রন্থাগারসমূহ) এক বা একাধিক অ্যাপ্লিকেশন বা পরিষেবাদি দ্বারা ব্যবহৃত সংস্থানগুলি অন্তর্ভুক্ত করে। এগুলিতে ক্লাস, আইকন, স্ট্রিং, অবজেক্টস, ইন্টারফেস এবং কোনও ইউআই বাদে বিকাশকারীদের প্রয়োজনীয় অনেক কিছুই থাকতে পারে।


3
তারা আসলে একটি ইউআই সঞ্চয় করতে পারে এবং বেশ কয়েকটি প্রোগ্রাম এটি করে। উদাহরণস্বরূপ স্ন্যাপ-ইনস।
ব্রায়ান আর বন্ডি

1

মাইক্রোসফ্ট অনুযায়ী

(ডিএলএল) ডায়নামিক লিংক লাইব্রেরি হ'ল এমন ফাইল যা অ্যাপ্লিকেশনগুলি চালনার জন্য প্রয়োজনীয় ডেটা, কোড বা সংস্থানগুলি অন্তর্ভুক্ত করে। এইগুলি ফাইলগুলি যা উইন্ডোজ ইকোসিস্টেম দ্বারা নির্মিত এবং দুটি বা আরও বেশি অ্যাপ্লিকেশনগুলির মধ্যে ভাগ করা যায়।

যখন কোনও প্রোগ্রাম বা সফ্টওয়্যার উইন্ডোজে চালিত হয়, অ্যাপ্লিকেশনটি কীভাবে কাজ করে তার অনেকটাই প্রোগ্রামের ডিএলএল ফাইলগুলির উপর নির্ভর করে। উদাহরণস্বরূপ, যদি কোনও নির্দিষ্ট অ্যাপ্লিকেশনটির বেশ কয়েকটি মডিউল থাকে, তবে প্রতিটি মডিউল কীভাবে একে অপরের সাথে ইন্টারেক্ট করে তা উইন্ডোজ ডিএলএল ফাইলগুলি দ্বারা নির্ধারিত হয়।

আপনি যদি বিশদ ব্যাখ্যা চান তবে এই দরকারী সংস্থানগুলি পরীক্ষা করে দেখুন

ডিএল ফাইলগুলি কী , ডেল ফাইলগুলি সম্পর্কে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.