سؤال

أعرف القليل جدا عن DLL's و Lib's بخلاف أنهم يحتويون على قانون حيوي مطلوب لبرنامج لتشغيل المكتبات بشكل صحيح. ولكن لماذا تولد الجمعية لهم على الإطلاق؟ لن يكون من الأسهل تضمين جميع التعليمات البرمجية في ملف قابل للتنفيذ واحد؟ وما الفرق بين DLL's و Lib؟

هل كانت مفيدة؟

المحلول

هناك مكتبات ثابتة (LIB) ومكتبات ديناميكية (DLL).

يتم استخدام المكتبات لأنك قد تعاني من كود تريد استخدامها في العديد من البرامج. على سبيل المثال، إذا كتبت وظيفة تحسب عدد الأحرف في سلسلة، فستكون هذه الوظيفة مفيدة في الكثير من البرامج. بمجرد أن تحصل على هذه الوظيفة بشكل صحيح، لا تريد إعادة ترجمة التعليمات البرمجية في كل مرة تستخدمها، لذلك تضع التعليمات البرمجية القابلة للتنفيذ لهذه الوظيفة في مكتبة، ويمكن للرابط استخراجه وإدخال التعليمات البرمجية المترجمة في البرنامج وبعد تسمى المكتبات الثابتة أحيانا "المحفوظات" لهذا السبب.

المكتبات الديناميكية تأخذ هذه الخطوة واحدة. يبدو من الصعب الحصول على نسخ متعددة من وظائف المكتبة التي تشغل مساحة في كل برنامج من البرامج. لماذا لا يمكنهم جميعا مشاركة نسخة واحدة من الوظيفة؟ هذا هو ما هي المكتبات الديناميكية. بدلا من بناء رمز المكتبة في البرنامج الخاص بك عندما يتم تجميعها، يمكن تشغيله عن طريق تعيينه في البرنامج الخاص بك لأنه يتم تحميله في الذاكرة. برامج متعددة تعمل في نفس الوقت الذي يستخدمه جميع الوظائف يمكن أن يشارك كل نسخ واحد، مما يوفر الذاكرة. في الواقع، يمكنك تحميل المكتبات الديناميكية فقط حسب الحاجة، اعتمادا على المسار من خلال التعليمات البرمجية الخاصة بك. لا توجد نقطة في وجود روتين الطابعة تناول الذاكرة إذا كنت لا تفعل أي طباعة. من ناحية أخرى، هذا يعني أنه يجب أن يكون لديك نسخة من المكتبة الديناميكية المثبتة على كل جهاز يعمل برنامجك. هذا يخلق مجموعة مشاكل الخاصة بها.

كمثال، سيحتاج كل برنامج مكتوب تقريبا في "C" إلى وظائف من مكتبة تسمى مكتبة وقت التشغيل C، على الرغم من أن بعض البرامج ستحتاج إلى جميع الوظائف. يأتي وقت تشغيل C في الإصدارات الثابتة والديناميكية، بحيث يمكنك تحديد الإصدار الذي يستخدمه البرنامج وفقا لاحتياجات معينة.

نصائح أخرى

جانب آخر هو الأمن (التبويض). بمجرد استخراج قطعة من التعليمات البرمجية من التطبيق الرئيسي ووضعها في مكتبة رابط ديناميكية "منفصلة"، فمن الأسهل الهجوم، تحليل (عكس المهندس) الرمز، لأنه تم عزله. عندما يتم الاحتفاظ بنفس القطعة من الكود في مكتبة Lib، فإنه جزء من التطبيق المستهدف المترجم (المرتبط)، وهذا أكثر صعوبة عزل (التفريق) التي قطعة من الكود من بقية الثنائيات المستهدفة.

أحد الأسباب المهمة لإنشاء DLL / LIB بدلا من مجرد تجميع التعليمات البرمجية في ملف قابل للتنفيذ هو إعادة استخدامها ونقلها. من المرجح أن يستخدم تطبيق Java أو .NET (على سبيل المثال) على الأرجح العديد من مكتبات الطرف الثالث (أو الإطار). من الأسهل وأسرع بكثير من الترجمة فقط مقابل مكتبة مسبقة البناء، بدلا من تجميع جميع كود الطرف الثالث في طلبك. تشجع الترجمة من التعليمات البرمجية الخاصة بك إلى المكتبات أيضا ممارسات التصميم الجيدة، مثل تصميم فصولك لاستخدامها في أنواع مختلفة من التطبيقات.

DLL هي مكتبة من الوظائف المشتركة بين البرامج القابلة للتنفيذ الأخرى. فقط ابحث في دليل Windows / System32 الخاص بك وستجد عشراتها. عندما يقوم برنامجك بإنشاء DLL، فإنه عادة ينشئ ملف LIB أيضا بحيث يمكن لبرنامج التطبيق * .EXE حل الرموز التي يتم الإعلان عنها في DLL.

a .lib هي مكتبة من الوظائف المرتبطة بشكل ثابت ببرنامج - لا يتم مشاركتها بواسطة برامج أخرى. يحتوي كل برنامج يرتبط مع ملف * .LIB جميع التعليمات البرمجية في هذا الملف. إذا كان لديك برنامجان A.EXE و B.EXE الرابط مع C.LIB ثم تحتوي كل A و B على الكود في C.LIB.

كيف تنشئ DLLs و Libs تعتمد على برنامج التحويل البرمجي الذي تستخدمه. كل مترجم يفعل ذلك بشكل مختلف.

الفرق الآخر يكمن في الأداء.

نظرا لأن DLL محملة في وقت التشغيل بواسطة

من ناحية أخرى، A.LIB هو رمز مرتبط بشكل ثابت في وقت الترجمة في كل عملية تطلب. وبالتالي فإن .exe (ق) سيكون لها ذاكرة واحدة، وبالتالي زيادة أداء العملية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top