ربط ثابتة ضد مكتبة بنيت مع نسخة مختلفة من مكتبة وقت التشغيل C، حسنا أو سيئة؟

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

سؤال

النظر في هذا السيناريو: روابط تطبيق إلى مكتبة الطرف الثالث أ.

تم بناء A باستخدام MSVC 2008 وربطها القانونية (أي. بنيت مع / MT) إلى مكتبة وقت تشغيل C V9.0.

تم بناء التطبيق باستخدام MSVC 2005 وربطه بشكل ثابت ب A و (WELL / MT) إلى مكتبة وقت التشغيل C V8.0.

أستطيع أن أرى مشكلة مع هذا - على سبيل المثال إذا تم تغيير الأنواع في الرؤوس بين إصدارات مكتبة وقت التشغيل.

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

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

المحلول

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

لا ينبغي تمرير أي نوع من الهيكل المحدد في وقت التشغيل أو الكائن أو الكيان حدود Accrosross حيث قد يتم استخدام إصدار وقت تشغيل مختلف: - سيتم الحصول على الملف * من مكتبة واحدة على سبيل المثال لن يكون له معنى لمكتبة مختلفة مرتبطة ب وقت تشغيل مختلف.

طالما استخدمت مكتبة API أنواعا خاما فقط، ولا تحاول المجانية () التي تم تمريرها () أو تمرير المؤشرات إلى ذاكرة MOLOC () داخليا () "D تتوقع أن يكون التطبيق (أو مكتبة أخرى) مجانا () أنت يجب أن تكون على ما يرام.

من السهل الوقوع في FUD أن "أي شيء يمكن أن يحدث خطأ" إذا تم خلط جمل C-Runtime، ولكن عليك أن تتذكر أن Libs، والمكتبات الديناميكية (.so / .dll / .dlylib) تم تطويرها تقليديا في مجموعة واسعة من اللغات: السماح للرمز المكتوبة في ASM، C، C ++، FORTRAN، Pascal وما إلى ذلك لتنتج عنها عبر واجهة ثنائية فعالة فعالة.

لماذا الذعر فجأة عندما تكون C مرتبطة ج؟

نصائح أخرى

هذه خطة سيئة للغاية. تجنب. إما إعادة ترجمة المكتبة في عام 2005 أو ترجمة التطبيق في عام 2008.

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

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