الحد الأدنى من المعلومات اللازمة للقيام (الديناميكي) الربط؟

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

  •  19-09-2019
  •  | 
  •  

سؤال

هذا سؤال صادفته مرارا وتكرارا، وعادة ما يتعلق بتوصيل الإضافات، ولكن في الآونة الأخيرة جئت عبرها محاولة وضع بعض مشكلات نظام البناء. قلقي هو في المقام الأول بالنسبة للأنظمة * NIX، ولكن أفترض أنه ينطبق على Windows أيضا.

السؤال هو، ما هو الحد الأدنى من المعلومات اللازمة للقيام بالربط الديناميكي؟ أعرف أن توزيعات Linux مثل Debian لديها ببساطة "I686"، وهو ما يكفي. ومع ذلك، أفترض أن هناك بعض المعلومات الضمنية هنا، وربما لن أكون قادرا على القيام بالربط الديناميكي لأي كائن مشترك طالما تم تجميعه باستخدام -march=i686, ، هل أنا؟

إذن ما يجب أن يتناسب بشكل صحيح بالنسبة لي لتتمكن من تحميل كائن مشترك بنجاح؟ أعلم أنه يجب على C ++ حتى المترجم (وأحيانا الإصدار) مطابقا بسبب الاسم المشحونة، لكنني كنت على أمل أن هذا لم يكن هذا هو الحال بالنسبة ل C.

أي أفكار موضع تقدير.

تعديل:
أجاب نيل جعلني أدرك أنني لا أتحدث حقا عن الربط الديناميكي، أو بالأحرى، السؤال هو طي ثنائي

  1. ما هو مطلوب للربط الثابت، و
  2. ما هو مطلوب للربط الديناميكي

لدي آمال أعلى لأول أعتقد.

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

المحلول

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

بالنسبة إلى تحديد تفاصيل الهندسة المعمارية بالضبط - يجب أن أعترف أنني لم أفعل ذلك أبدا. هل تخطط لتوزيع المكتبات الثنائية على متغيرات Linux المختلفة؟

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