কীভাবে আমদানি গ্রন্থাগার কাজ করে? বিশদ?


90

আমি জানি এটি গিক্সকে বেশ বেসিক মনে হতে পারে। তবে আমি এটি স্ফটিক পরিষ্কার করতে চাই।

যখন আমি একটি Win32 ডিএলএল ব্যবহার করতে চাই, সাধারণত আমি কেবলমাত্র লোডলাইবারি () এবং গেটপ্রোকএডারস () এর মতো এপিআইগুলিতে কল করি। তবে সম্প্রতি, আমি ডাইরেক্টএক্স 9 নিয়ে বিকাশ করছি এবং আমার d3d9.lib , d3dx9.lib , ইত্যাদি ফাইল যুক্ত করা দরকার।

আমি যথেষ্ট শুনেছি যে এলআইবি স্থির সংযোগের জন্য এবং ডিএলএল গতিশীল সংযোগের জন্য।

সুতরাং আমার বর্তমান বোঝাপড়াটি হচ্ছে এলআইবি পদ্ধতিগুলির বাস্তবায়ন ধারণ করে এবং চূড়ান্ত EXE ফাইলের অংশ হিসাবে লিংক সময়ে স্থিতিশীলভাবে সংযুক্ত থাকে। যদিও DLL রানটাইমে গতিশীল এবং চূড়ান্ত EXE ফাইলের অংশ নয় part

তবে কখনও কখনও, ডিএলএল ফাইলগুলির সাথে কিছু এলআইবি ফাইল আসে, তাই:

  • এই এলআইবি ফাইলগুলি কীসের জন্য?
  • তারা যা বোঝাতে চেয়েছিল তা কীভাবে অর্জন করবে?
  • এমন কোনও সরঞ্জাম আছে যা আমাকে এই এলআইবি ফাইলগুলির অভ্যন্তরীণ পরিদর্শন করতে দেয়?

আপডেট 1

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

আপডেট 2

আরবার্তেগ ঠিক যেমনটি বলেছিলেন, ডিএলএলগুলির সাথে জন্মগত এলআইবি ফাইলগুলিতে কিছু স্টাব কোড রয়েছে। সুতরাং কলিং ক্রমটি এর মতো হওয়া উচিত:

আমার মূল অ্যাপ্লিকেশন -> এলআইবিতে স্টাব -> আসল লক্ষ্য ডিএলএল

তাহলে এই এলআইবিগুলিতে কী তথ্য থাকা উচিত? আমি নিম্নলিখিত সম্পর্কে চিন্তা করতে পারে:

  • এলআইবি ফাইলটিতে সংশ্লিষ্ট ডিএলএল এর পূর্ণপথ থাকতে হবে; সুতরাং DLL রানটাইম দ্বারা লোড করা যেতে পারে।
  • প্রতিটি ডিএলএল রফতানি পদ্ধতির প্রবেশের পয়েন্টের আপেক্ষিক ঠিকানা (বা ফাইল অফসেট?) স্টাবের মধ্যে এনকোড করা উচিত; সুতরাং সঠিক জাম্প / পদ্ধতি কল করা যেতে পারে।

আমি কি এই ঠিক? আরও কিছু আছে কি?

বিটিডাব্লু: এমন কোনও সরঞ্জাম আছে যা আমদানি গ্রন্থাগারটি পরীক্ষা করতে পারে? আমি যদি এটি দেখতে পাই তবে আর কোনও সন্দেহ হওয়ার দরকার নেই।


4
আমি দেখছি যে কেউ আপনার প্রশ্নের শেষ অংশটিকে সম্বোধন করেছে, যা এমন সরঞ্জামগুলিকে সম্মান করে যা কোনও আমদানি গ্রন্থাগার পরিদর্শন করতে পারে। ভিজ্যুয়াল সি ++ এর সাথে এটি করার কমপক্ষে দুটি উপায় রয়েছে: lib /list xxx.libএবং link /dump /linkermember xxx.lib। দেখুন এই স্ট্যাক ওভারফ্লো প্রশ্ন
অ্যালান

এছাড়াও, এবং ইউটিলিটির dumpbin -headers xxx.libতুলনায় আরও কিছু বিশদ তথ্য সরবরাহ করে। liblink
এম_কাটিসফারাকিস

উত্তর:


105

একটি ডিএলএল ফাইল সংযোগ ঘটতে পারে পরোক্ষভাবেকম্পাইল লিংক সময়, বা স্পষ্টভাবে রান টাইম এ। যে কোনও উপায়ে, ডিএলএল প্রসেসের মেমরি স্পেসে লোড হয়ে যায় এবং এর রফতানি হওয়া সমস্ত এন্ট্রি পয়েন্ট অ্যাপ্লিকেশনটিতে উপলব্ধ।

যদি রান সময়ে স্পষ্টভাবে ব্যবহৃত, আপনি ব্যবহার LoadLibrary()এবং GetProcAddress()নিজে থেকে ডিএলএল লোড এবং ফাংশন আপনাকে কল করার প্রয়োজন পয়েন্টার পেতে।

প্রোগ্রামটি তৈরির সময় যদি স্পষ্টভাবে সংযুক্ত থাকে, তবে প্রোগ্রামটি দ্বারা ব্যবহৃত প্রতিটি ডিএলএল রফতানির জন্য স্টাবগুলি আমদানি গ্রন্থাগার থেকে প্রোগ্রামের সাথে যুক্ত হয়ে যায় এবং প্রসেসটি চালু হওয়ার সাথে সাথে EXE এবং DLL লোড হওয়ার সাথে সাথে সেই স্টাবগুলি আপডেট হয়ে যায়। (হ্যাঁ, আমি এখানে একটু বেশিই সরলীকরণ করেছি ...)

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

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

ঘটনাক্রমে আপনি যদি জিসিসি সরঞ্জামচেন ব্যবহার করেন তবে আপনার ডিএলএলগুলির সাথে ম্যাচ করার জন্য আপনার আসলে আমদানি গ্রন্থাগারগুলির প্রয়োজন নেই। উইন্ডোতে পোর্ট করা জ্ঞানু লিঙ্কারের সংস্করণটি সরাসরি ডিএলএল বোঝে এবং ফ্লাইয়ের যে কোনও প্রয়োজনীয় স্টাব সংশ্লেষ করতে পারে।

হালনাগাদ

সব বাদাম এবং বল্টু আসলেই কোথায় এবং সত্যই কী চলছে তা জেনে আপনি যদি প্রতিরোধ করতে না পারেন তবে এমএসডিএন-তে সবসময় সাহায্য করার জন্য কিছু থাকে। ম্যাট পিট্রেকের নিবন্ধটি উইন 32 পোর্টেবল এক্সিকিউটেবল ফাইল ফর্ম্যাটের একটি অন-গভীরতার দিকে নজর দেওয়া EXE ফাইলের ফর্ম্যাট এবং এটি কীভাবে লোড হবে এবং কীভাবে চালিত হবে তার একটি সম্পূর্ণ সম্পূর্ণ পর্যালোচনা। এটি মূলত এমএসডিএন ম্যাগাজিন সিএ-তে প্রকাশিত হওয়ার পরে এটি নেট কভার করে আপডেট করা হয়েছে updated 2002।

এছাড়াও, কোনও প্রোগ্রাম দ্বারা কী কী ডিএলএল ব্যবহার করা হয় তা কীভাবে শিখতে হয় তা জানতে সহায়ক হতে পারে। তার জন্য সরঞ্জামটি নির্ভরতা ওয়াকার, ওরফে depend.exe। এর একটি সংস্করণ ভিজ্যুয়াল স্টুডিওতে অন্তর্ভুক্ত করা হয়েছে তবে সর্বশেষতম সংস্করণটি তার লেখকের http : //www.d dependencywalker.com/ এ উপলব্ধ । এটি লিংক সময়ে নির্দিষ্ট করা সমস্ত ডিএলএল সনাক্ত করতে পারে (প্রারম্ভিক লোড এবং বিলম্ব বোঝা উভয়ই) এবং এটি প্রোগ্রামটি চালাতে এবং রান সময়ে এটি অতিরিক্ত লোড হওয়া কোনও অতিরিক্ত ডিএলএলগুলির জন্য নজর রাখতে পারে।

আপডেট 2

আমি পুনরায় পড়ার উপর এটি স্পষ্ট করতে এবং এমএসডিএন এর সাথে সামঞ্জস্য করার জন্য শিল্পের অন্তর্নিহিত এবং স্পষ্টত লিঙ্কের শর্তাদি ব্যবহার করতে পূর্ববর্তী কিছু পাঠ্য লিখেছি ।

সুতরাং, আমাদের কাছে তিনটি উপায় রয়েছে যে কোনও প্রোগ্রামের দ্বারা ব্যবহারের জন্য গ্রন্থাগার ফাংশনগুলি উপলব্ধ করা যেতে পারে। সুস্পষ্ট ফলোআপ প্রশ্নটি তখন: "আমি কীভাবে নির্বাচন করব?"

স্ট্যাটিক লিঙ্কিং হ'ল কীভাবে প্রোগ্রামটির স্বয়ংক্রিয়ভাবে লিঙ্ক হয়। আপনার সমস্ত অবজেক্ট ফাইল তালিকাবদ্ধ রয়েছে এবং লিঙ্কার দ্বারা EXE ফাইলে একত্রিত হন। পথে, লিঙ্কার গ্লোবাল প্রতীকগুলির রেফারেন্সগুলি ঠিক করার মতো ছোট ছোট কাজগুলি যত্ন করে যাতে আপনার মডিউলগুলি একে অপরের কার্যকারিতা কল করতে পারে। গ্রন্থাগারগুলিও স্থিতিশীলভাবে সংযুক্ত করা যেতে পারে। লাইব্রেরিটি তৈরি করা অবজেক্ট ফাইলগুলি একটি লাইব্রেরিয়ান দ্বারা একটি .LIB ফাইলে সংগ্রহ করা হয় যা লিঙ্কার প্রতীকযুক্ত মডিউলগুলির জন্য অনুসন্ধান করে যা প্রয়োজনীয়। স্ট্যাটিক লিঙ্কিংয়ের একটি প্রভাব হ'ল প্রোগ্রাম দ্বারা ব্যবহৃত গ্রন্থাগার থেকে কেবল সেই মডিউলগুলিই এর সাথে যুক্ত; অন্যান্য মডিউল উপেক্ষা করা হয়। উদাহরণস্বরূপ, Cতিহ্যবাহী সি গণিত লাইব্রেরিতে অনেকগুলি ত্রিকোনমিতি ফাংশন অন্তর্ভুক্ত রয়েছে। তবে আপনি যদি এর বিপরীতে লিঙ্ক করেন এবং ব্যবহার করেনcos(), আপনার জন্য একটি কোড কপি দিয়ে শেষ হবে না sin()বা tan()যদি না আপনি সেই ফাংশন বলা হয়। বৈশিষ্ট্যগুলির সমৃদ্ধ সেট সহ বৃহত্তর গ্রন্থাগারগুলির জন্য, মডিউলগুলির এই নির্বাচনী অন্তর্ভুক্তি গুরুত্বপূর্ণ। এম্বেড থাকা সিস্টেমের মতো অনেক প্ল্যাটফর্মে, লাইব্রেরিতে ব্যবহারের জন্য উপলব্ধ কোডের মোট আকার ডিভাইসে এক্সিকিউটেবল সঞ্চয় করার জন্য উপলব্ধ জায়গার তুলনায় বড় হতে পারে। নির্বাচনী অন্তর্ভুক্তি ব্যতীত plat প্ল্যাটফর্মগুলির জন্য বিল্ডিং প্রোগ্রামগুলির বিশদটি পরিচালনা করা আরও কঠিন।

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

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

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

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

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


4
আমার পোস্ট মুছে ফেলা এবং এটি সমর্থন করা, কারণ আপনি আমার চেয়ে জিনিসকে আরও ভালভাবে ব্যাখ্যা করেন;) ভাল উত্তর।
ereOn

4
@ আরবার্টিগ: আপনার দুর্দান্ত উত্তরের জন্য ধন্যবাদ। এখানে কিছুটা সংশোধন করা হয়েছে ( এমএসডিএন.মাইক্রোসফট.ইন.ইউএস / লাইবারি /৯আইডি৯৩৩৩৩৩.এসপিএক্স ) অনুসারে , একটি ডিএলএল, লোড-টাইম অন্তর্নিহিত লিঙ্কিং এবং রান-টাইম স্পষ্ট লিঙ্কিংয়ের সাথে 2 ধরণের গতিশীল সংযোগ রয়েছে । কোনও সংকলন-সময় সংযোগ নেই । এখন আমি ভাবছি traditional তিহ্যবাহী স্ট্যাটিক লিঙ্কিং (* বাস্তবায়নের একটি * .lib ফাইলের সাথে লিঙ্ক করা) এবং লোড-টাইম গতিশীল কোনও ডিএলএল (একটি আমদানির লাইব্রেরির মাধ্যমে) সংযোগের মধ্যে পার্থক্য কী ?
স্মিভিকিপিডিয়া

4
চালিয়ে যান: স্ট্যাটিক লিঙ্কিং এবং লোড-টাইম ডায়নামিক লিঙ্কিংয়ের উপকারিতা এবং বিভক্তিগুলি কী কী ? দেখে মনে হচ্ছে এই 2 টি পদ্ধতির উভয়ই প্রক্রিয়া শুরুর সময় সমস্ত প্রয়োজনীয় ফাইল অ্যাড্রেস স্পেসে লোড করে দেয়। আমাদের কেন তাদের দুটি দরকার? ধন্যবাদ
স্মিভিকিপিডিয়া

4
আপনি একটি "লাইবডাম্প" এর মতো একটি সরঞ্জাম ব্যবহার করে .lib ফাইলের ভিতরে উঁকি দিতে পারেন এবং এটি আমদানি গ্রন্থাগার বা সত্য স্ট্যাটিক লাইব্রেরি কিনা তা নির্ধারণ করতে পারেন। লিনাক্সে যখন একটি উইন্ডোজ টার্গেটের সাথে ক্রস সংকলন করা হয়, তখন .a ফাইলগুলিতে 'আর' বা 'এনএম' চালানো সম্ভব (.lib ফাইলগুলির মিংডাব্লু সংস্করণ) এবং নোট করুন যে আমদানি লিবগুলির জেনেরিক .o ফাইলের নাম রয়েছে এবং কোনও কোড নেই (কেবলমাত্র একটি 'জ্যাম্প' নির্দেশ), যখন স্থির লিবের ভিতরে প্রচুর ফাংশন এবং কোড থাকে।
উজ্জ্বল ডোন

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

5

আমদানি লাইব্রেরী Linker->Input->Additional Dependenciesদ্বারা সরবরাহিত লিঙ্ক সময়ে অতিরিক্ত তথ্য প্রয়োজন এমন dll এর একগুচ্ছ তৈরি করার সময় এই .LIB আমদানি গ্রন্থাগার ফাইলগুলি নিম্নলিখিত প্রকল্পের সম্পত্তিটিতে ব্যবহৃত হয় । লিঙ্কারের ত্রুটি না পাওয়ার জন্য নীচের উদাহরণে আমাকে dl এর A, B, C, এবং D এর lib ফাইলের মাধ্যমে উল্লেখ করতে হবে। (লিঙ্কারের জন্য এই ফাইলগুলি সন্ধানের জন্য নোট করুন যাতে আপনার তাদের মোস্তাকের পথটি অন্তর্ভুক্ত করতে হতে পারে Linker->General->Additional Library Directoriesঅন্যথায় আপনি সরবরাহকৃত কোনও lib ফাইল খুঁজে পেতে অক্ষম হওয়া সম্পর্কে বিল্ড ত্রুটি পাবেন))

লিঙ্কার-> ইনপুট-> অতিরিক্ত নির্ভরতা

যদি আপনার সমাধানটি সমস্ত গতিশীল লাইব্রেরি তৈরি করে থাকে তবে আপনি Common Properties->Framework and Referencesডায়ালগের অধীনে প্রকাশিত রেফারেন্স ফ্ল্যাগগুলির পরিবর্তে নির্ভর করে এই সুস্পষ্ট নির্ভরতা স্পেসিফিকেশন এড়াতে সক্ষম হতে পারবেন । এই পতাকাগুলি স্বয়ংক্রিয়ভাবে * .lib ফাইলগুলি ব্যবহার করে আপনার পক্ষে লিঙ্কিং করতে উপস্থিত হবে। ফ্রেমওয়ার্ক এবং রেফারেন্স

এটি যদিও এটি একটি সাধারণ বৈশিষ্ট্য হিসাবে বলা হয়, যা কনফিগারেশন বা প্ল্যাটফর্ম নির্দিষ্ট নয়। আমাদের অ্যাপ্লিকেশনটির মতো আপনার যদি কোনও মিশ্র বিল্ড দৃশ্যের সমর্থন করার প্রয়োজন হয় তবে আমাদের কাছে স্ট্যাটিক বিল্ড রেন্ডার করার জন্য একটি বিল্ড কনফিগারেশন এবং গতিশীল লাইব্রেরি হিসাবে স্থাপন করা সমাবেশগুলির একটি উপসেটের একটি সীমাবদ্ধ বিল্ট নির্মিত একটি বিশেষ কনফিগারেশন ছিল। আমি ব্যবহার করেছিল Use Library Dependency Inputs এবং Link Library Dependenciesপতাকা বিভিন্ন ঘটনা অধীনে সত্যতে সেট জিনিষ গড়ে তুলতে পেতে এবং পরে কিছু প্রক্রিয়া সহজ করার জন্য নিরূপক কিন্তু যখন স্ট্যাটিক আমার কোড প্রবর্তনের তৈরী করে আমি linker সতর্কবার্তা একটি টন পরিচয় বিল্ড অবিশ্বাস্যভাবে ধীর জন্য স্ট্যাটিক তৈরী করে ছিল। আমি এই ধরণের সতর্কতাগুলির একটি গোছা পরিচয় করিয়ে দিয়েছি ...

warning LNK4006: "bool __cdecl XXX::YYY() already defined in CoreLibrary.lib(JSource.obj); second definition ignored  D.lib(JSource.obj)

এবং Additional Dependenciesগতিশীল বিল্ডগুলির জন্য লিঙ্কারকে সন্তুষ্ট করার জন্য ম্যানুয়াল স্পেসিফিকেশন ব্যবহার করে আমি ক্ষতবিক্ষত করেছি যখন স্থির নির্মাতারা একটি সাধারণ সম্পত্তি ব্যবহার না করে খুশি রাখেন যা তাদেরকে ধীর করে দেয়। আমি যখন ডায়নামিক সাবসেট বিল্ড স্থাপন করি তখন আমি কেবলমাত্র dll ফাইলগুলি স্থাপন করি কারণ এই লিব ফাইলগুলি কেবল লিঙ্ক টাইমে ব্যবহৃত হয়, রানটাইমের সময় নয়।


3

তিন ধরণের লাইব্রেরি রয়েছে: স্থির, ভাগ এবং গতিশীল লোড লাইব্রেরি।

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

গতিশীলভাবে লোড করাগুলি ভাগ করা লাইব্রেরির মতো হয়, আপনি লেখার কোড দিয়ে যখন প্রয়োজন দেখা দেয় এবং সেগুলি লোড না করা ব্যতীত।


@ ধন্যবাদ জ্যাকসেক। তবে আমি শেয়ার্ড লাইব্রেরি সম্পর্কে আপনার বক্তব্য সম্পর্কে নিশ্চিত নই।
স্মিভিকিপিডিয়া

@ এসএমউইকিপিডিয়া: লিনাক্সের সেগুলি রয়েছে, আমি সেগুলি ব্যবহার করি, সুতরাং এগুলির সর্বাধিক উপস্থিত রয়েছে। আরও পড়ুন:
এন.ইউইকিপিডিয়া.আরউইকি / লাইব্রেরি_( কমপুটিং

4
এটি একটি সূক্ষ্ম পার্থক্য। ভাগ করা এবং গতিশীল লাইব্রেরি দুটি ডিএলএল ফাইল। পার্থক্যটি যখন তারা বোঝা হয়। ভাগ করা লাইব্রেরিগুলি EXE এর সাথে ওএস দ্বারা লোড হয়। ডায়নামিক লাইব্রেরিগুলি কোড কলিং LoadLibrary()এবং সম্পর্কিত API গুলি দ্বারা লোড হয় ।
আরবার্তেগ

আমি [1] থেকে পড়েছি যে ডিএলএল হ'ল মাইক্রোসফ্ট শেয়ার্ড লাইব্রেরি ধারণাটি বাস্তবায়ন করেছে। [1]: en.wikipedia.org/wiki/Dynamic-link_library#Import_libraries
smwikipedia

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

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