التجليد المباشر
الربط المباشر هو ميزة في الرابط والرابط الديناميكي في نظامي التشغيل Solaris و OpenSolaris . يوفر هذا الربط طريقةً تسمح للمكتبات بربط الرموز مباشرةً بمكتبات أخرى، بدلاً من الربط الضعيف بها وترك مهمة تحديد المكتبة التي تحتوي على الرمز للرابط الديناميكي.
نظرية
عند ربط مكتبة مشتركة أو ملف تنفيذي مرتبط ديناميكيًا، يقوم الرابط عادةً بتعبئة جدول الرموز لتلك المكتبة بجميع الرموز المطلوبة. ويضيف الرموز إلى الكائن الحالي مع إزاحتها، ويترك الرموز غير المعرفة في الكائن دون حل. يجب أن تظل الرموز غير المحلولة معروفة وقت الربط، ولكن يتم تمرير المكتبات المشتركة إلى الرابط للربط معها، وعندما يعثر على رمز في مكتبة أخرى، يضع ملاحظة في مكتبة الإخراج تشير إلى اعتمادها على هذه المكتبات المشتركة الأخرى.
يُجبر هذا النوع من الربط الضعيف الرابط الديناميكي على تحديد المكتبة التي تحتوي على كل رمز عند تشغيل الملف التنفيذي. على سبيل المثال، يقرأ الرابط الديناميكي في نظام لينكس قسم DT_NEEDED من كائن ELF ويُحمّل المكتبات المطلوبة، لكنه لا يُحدد مكان الرموز المطلوبة. ولذلك، يجب عليه المرور على كل رمز غير مُحدد في الكائن، ولكل رمز منها، المرور على كل مكتبة مُحمّلة، والتحقق حتى يعثر على رمز مطابق. قد يستغرق هذا وقتًا طويلاً.
يتغلب الربط المباشر على هذه المشكلة بتخزين قائمة مكافئة من المؤشرات إلى مدخلات DT_NEEDED في قسم منفصل من ملف ELF. يتوافق كل مؤشر مع رمز في الكائن؛ وبالتالي، تُنشئ هذه المؤشرات علاقة بين الرمز ومدخل DT_NEEDED. يسمح هذا للرابط بتحديد موقع المكتبة المُحددة بواسطة مدخل DT_NEEDED معين، والتحقق من جدول الرموز الخاص بها فقط لكل رمز، بدلاً من المرور عبر جميع المكتبات المحتملة لكل رمز.
مراجع
- ربط المكتبات - لنكن أكثر دقة قليلاً، أليس كذلك؟
روابط خارجية
- أوبن سولاريس
- نماذج يونكس
