كيف يمكن للمرء أن يحقق الربط المتأخر بلغة C؟

StackOverflow https://stackoverflow.com/questions/2085614

  •  21-09-2019
  •  | 
  •  

سؤال

كيف يمكن للمرء أن يحقق متأخرا ربط بلغة ج؟

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

المحلول

الربط المتأخر ليس في الحقيقة وظيفة لغة C نفسها ، أكثر شيء توفره لك بيئة التنفيذ.

ستوفر العديد من الأنظمة الربط المؤجل كميزة للرابط/اللودر ويمكنك أيضًا استخدام مكالمات صريحة مثل dlopen (لفتح مكتبة مشتركة) و dlsym (للحصول على عنوان رمز داخل تلك المكتبة حتى تتمكن من الوصول إليه أو الاتصال به).

الطريقة الوحيدة شبه المحمولة للحصول على الربط المتأخر مع معيار C هي استخدام بعض الخداع مع system() وحتى هذا هو على الأقل جزئيا التنفيذ.

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

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

نصائح أخرى

يتم دائمًا ارتباط الرمز في C في وقت الترجمة ، ولا يتم تشغيل وقت التشغيل أبدًا.

يتم ربط المكتبة ، أو الارتباط الديناميكي كما يطلق عليه ، dlopen() و dlsym() على *nix ، و LoadLibrary() و GetProcAddress() على Windows.

كيف يمكن للمرء أن يحقق الربط المتأخر بلغة C؟

الأقرب سيكون من خلال التحميل الديناميكي للمكتبة (DLL) كما هو dlopen & DLSYM على Linux. خلاف ذلك ، فهي غير متوفرة مباشرة في C.

استخدم Objective-C أو Lua. كلاهما لغات متأخرة والتي يمكن أن تتفاعل بسهولة مع C.

بالطبع يمكنك تنفيذ مخطط حل الأسماء الخاص بك ، ولكن لماذا إعادة اختراع العجلة؟

لسوء الحظ ، لم تحدد نظام التشغيل. بالنسبة لـ UNIX ، يمكنك استخدام المكتبات المشتركة ، أو إنشاء بنية وحدة (مكون إضافي) قابل للتكوين. للحصول على التفاصيل ، قد تجد الكود المصدري لخادم الويب Apache 1.3 مفيد. http://httpd.apache.org/download.cgi

يبدو أن CPPDEV هي الواحدة وفقط لضرب المكان مع ملاحظته. من فضلك ، إلقاء نظرة على التعريف نفسه. بعبارة قليلة:

الربط المتأخر ، أو الربط الديناميكي ، هو آلية لبرمجة الكمبيوتر يتم فيها البحث عن الطريقة التي يتم استدعاؤها على كائن بالاسم في وقت التشغيل.

جميع الإجابات الأخرى فقط تفوت النقطة الرئيسية ، وهي "البحث بالاسم".

سيكون الحل المطلوب مشابهًا جدًا لجدول بحث للمؤشرات إلى الوظائف مع وظيفة أو اثنتين لتحديد الحديد بالاسم (أو حتى عن طريق التوقيع). نسميها "جدول التجزئة".

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