المكتبة الثابتة
تحتوي المكتبة الثابتة أو المكتبة المرتبطة بشكل ثابت على دوال وبيانات يمكن تضمينها في برنامج حاسوبي أثناء عملية البناء، بحيث لا تحتاج المكتبة إلى أن تكون متاحة في ملف منفصل أثناء التشغيل. [ 1 ] إذا كانت جميع المكتبات مرتبطة بشكل ثابت، فسيكون الملف التنفيذي الناتج مستقلاً ، أي أنه بناء ثابت .
المكتبات الثابتة هي مجموعات من ملفات الكائنات ، وعادةً ما تُزود بجدول رموز يُسرّع البحث عن الملفات المطلوبة. في معظم الأنظمة ( أنظمة يونكس ومايكروسوفت ويندوز )، تأتي هذه المكتبات على شكل ملفات أرشيفية بصيغة ar ، بينما تستخدم بعض الأنظمة، مثل z/OS و OpenVMS، صيغةً مختلفة. [ أ ] تُدمج المكتبة الثابتة مع مكتبات ثابتة أخرى وملفات كائنات أثناء عملية البناء لتكوين ملف تنفيذي واحد ، أو تُحمّل أثناء التشغيل في مساحة عنوان الملف التنفيذي المقابل لها عند إزاحة ذاكرة ثابتة تُحدد أثناء عملية الترجمة/الربط.
مقارنة بالربط الديناميكي
تاريخياً، كان ربط المكتبات ثابتاً، ولكن اليوم أصبح الربط الديناميكي بديلاً وينطوي على مقايضات متأصلة.
تتمثل إحدى مزايا الربط الثابت على الربط الديناميكي في ضمان توفر إجراءات المكتبة المطلوبة للتطبيق أثناء التشغيل، حيث يتم تضمين شيفرة هذه الإجراءات في الملف التنفيذي. أما مع الربط الديناميكي، فقد لا يكون ملف المكتبة موجودًا، بل وحتى في حال العثور عليه، قد يكون إصدارًا غير متوافق. يتجنب الربط الثابت مشكلة تعارض المكتبات الديناميكية (DLL Hell) أو مشكلة التبعيات بشكل عام ، وبالتالي يُسهّل عملية التطوير والتوزيع والتثبيت.
في الربط الثابت، لا يُضمّن الرابط الذكي إلا الشيفرة المستخدمة فعليًا، أما في المكتبة الديناميكية، فتُحمّل المكتبة بأكملها في مساحة العناوين، ما يعني إمكانية تحميل الشيفرة غير المستخدمة في البرنامج إلى الذاكرة. مع ذلك، إذا كان أكثر من برنامج يستخدم تلك الشيفرة، تُحمّل نسخة واحدة فقط من الشيفرة المشتركة إلى الذاكرة.
يكون حجم الملف التنفيذي أكبر عند استخدام الربط الثابت مقارنةً بالربط الديناميكي، لأن الملف التنفيذي المرتبط ثابتًا يتضمن نسخًا من إجراءات المكتبة التي يستخدمها البرنامج. مع ذلك، إذا تم قياس حجم التطبيق كمجموع حجم الملف التنفيذي ومكتباته الديناميكية، فسيكون الحجم الإجمالي أقل عمومًا عند استخدام الربط الثابت. ولكن إذا استخدمت تطبيقات متعددة نفس المكتبة الديناميكية، فقد يكون الحجم الإجمالي للتطبيقات والمكتبات الديناميكية مجتمعةً أقل عند استخدام الربط الديناميكي.
من الممارسات الشائعة في نظام ويندوز تثبيت المكتبات الديناميكية للبرنامج مع ملف البرنامج نفسه. [ 2 ] أما في الأنظمة الشبيهة بنظام يونكس، فهذا أقل شيوعًا، إذ يمكن استخدام أنظمة إدارة الحزم لضمان توفر ملفات المكتبة الصحيحة في موقع مشترك. يمكن مشاركة ملفات المكتبة بين التطبيقات، مما يوفر مساحة تخزين. كما يمكن تحديث المكتبة لإصلاح الأخطاء والثغرات الأمنية دون الحاجة إلى تحديث كل تطبيق يستخدمها. مع ذلك، فإن المكتبات الديناميكية المشتركة تُعرّض النظام لخطر مشاكل التبعية.
من الناحية العملية، تستخدم العديد من الملفات التنفيذية مكتبات ثابتة وديناميكية على حد سواء.
الربط والتحميل
يمكن لأي دالة في مكتبة ثابتة استدعاء دالة أو إجراء في مكتبة ثابتة أخرى. ويتعامل الرابط والمحمل مع هذا بنفس طريقة تعاملهما مع أنواع ملفات الكائنات الأخرى . قد يتم ربط ملفات المكتبات الثابتة أثناء التشغيل بواسطة محمل الربط (مثل محمل وحدات X11 ). ومع ذلك، فإن تسمية هذه العملية بالربط الثابت أمرٌ مثير للجدل.
إنشاء مكتبات ثابتة في لغة C/C++
يمكن إنشاء المكتبات الثابتة بسهولة باستخدام لغة C أو C++ . توفر هاتان اللغتان مُحدِّدات فئة التخزين للإشارة إلى الربط الخارجي أو الداخلي، بالإضافة إلى ميزات أخرى. لإنشاء مكتبة من هذا النوع، يجب تحديد الربط الخارجي للدوال أو الإجراءات المُصدَّرة، بالإضافة إلى الكائنات والمتغيرات الأخرى (أي بعدم استخدام staticالكلمة المفتاحية C ). عادةً ما تحمل أسماء ملفات المكتبات الثابتة الامتداد " .a " على أنظمة يونكس [ 1 ] ، والامتداد " .lib " على أنظمة مايكروسوفت ويندوز .
على سبيل المثال، في نظام شبيه بنظام يونكس، لإنشاء أرشيف باسم libclass.a من الملفات class1.o و class2.o و class3.o ، سيتم استخدام الأمر التالي: [ 1 ]
ar rcs libclass.a class1.o class2.o class3.o
لتجميع برنامج يعتمد على class1.o و class2.o و class3.o ، يمكن للمرء أن يفعل ما يلي:
cc main.c libclass.a
أو (إذا تم وضع libclass.a في مسار المكتبة القياسي، مثل /usr/local/lib )
cc main.c -lclass
أو (أثناء الربط)
ld ... main.o -lclass ...
بدلاً من:
cc main.c class1.o class2.o class3.o
تستخدم ملفات المكتبة الثابتة لكل من أنظمة Unix و Windows تنسيق ar .
انظر أيضاً
ملاحظات توضيحية
- ↑ قد تكون المكتبة الثابتة على نظام z/OS عبارة عن مجموعة بيانات مقسمة ( PDS ) تحتوي على مجموعات كائنات ، أو مجموعة بيانات مقسمة تحتوي على وحدات تحميل ، أو مجموعة بيانات مقسمة موسعة ( PDSE أو PDS/E ) تحتوي على كائنات برامج . ( قدم نظام إدارة خدمات النظام DFSMS نظام PDS/E؛ أما التنسيقان الآخران فهما موروثان من نظام التشغيل OS/360 ). تستخدم برامج z/OS المصممة لبيئة خدمات نظام UNIX (USS) هذا التنسيق .
مراجع
- مكتبات الحاسوب
