سؤال

أعلم أن هناك بعض الأسئلة المشابهة، لكنني لا أعتقد أن لديهم حقا نفس المتطلبات مثل الألغام.

يتم تجميع DLL لدينا مع Visual Studio 2005 و يجب رابط مع إصدار محدد من CRT، بسبب قيود التثبيت. هذا هو المطلق، وإعادة ترجمةه مع أحدث إصدار ليس حلا.

لقد قمنا مؤخرا بتحديث مكتبات التعزيز مؤخرا. ومع ذلك، عندما بنيت دفعة، استخدم تلقائيا أحدث CRT. الآن، عندما أربط دفعة مع برنامجنا، فإنه يخلق اعتمادا على كل من أحدث إصدار (خطأ) من CRT والنسخة القديمة (الصحيحة) من CRT. الاعتماد على أحدث إصدار يحتاج إلى الذهاب.

ما هو أفضل حل لهذه المشكلة؟ في الوقت الحالي، أفضل ما يمكن أن أفكر فيه هو إعادة بناء دفعة باستخدام الإصدار القديم، لكن ليس لدي أي فكرة عن كيفية القيام بذلك بسهولة دون تعديل المصدر.

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

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

المحلول 2

كان الحل يعدل يدويا البيان المضمن لإزالة التبعية على أحدث CRT، حيث تم تصميمه مع CRT مرتبط بشكل حيوي. أنا أشك في سلامة هذا، رغم ذلك.

لسبب ما، لم تجبرها القوة بما في ذلك ملف BostsSXS أثناء عملية Boost Bust Process لاستهداف CRT المحدد.

نصائح أخرى

AFAIK، لا ينصح باستخدام إصدارات مختلفة من CRT. على عكس .NET حيث يمكنك الرجوع إلى .NET 1.1 DLL من DLL .NET 2.0 DLL، لا يوفر غير المدارة هذه المرونة.

نظرا لأنك لا يمكنك ترقية DLLs الخاصة بك لاستخدام CRT الأحدث، فإن الشيء الوحيد الذي يمكنك القيام به هو إعادة بناء BOOST في VS2005.

كما أنه لا ينصح بربط DLLs من CRT المختلفة. يمكن أن يؤدي إلى مشاكل مثل تلف الذاكرة.

ملاحظة: يحتوي كل ستوديو Visual Studio على إصدار CRT الافتراضي الذي يشير إليه جميع DLLs.

كما أنني لم أفهم "إزالة CRT الجديد". ستحتاج إلى تثبيت Visual Studio Redist لكل إصدار من Visual Studio الذي تستخدمه. (أن المحددي يحتوي على CRT DLL)http://msdn.microsoft.com/en-us/library/abx4dbyh٪28VS.80٪29.aspx.

يجب أن تجد بالضبط ما هو بناء في مشروع دفعة ضغن عن الاعتماد على CRT الخطأ وإزالة / تعديل هذا البناء. قد يكون هناك شيء في ملف .vcproj أو بعض البيان أو شيء من هذا القبيل.

VC ++ 2005 و VC ++ 2008 CRTs تحتوي على أكثر أو أقل من التمثيل البدائيين - من المحتمل أن تتمتع بإعادة ترجمة دفعة كاملة مع VC ++ 2005 أو قرصها قليلا وإعادة ترجمة بعد ذلك. نعم، سيتطلب ذلك بعض الجهد، لكن هذه هي الطريقة الوحيدة للذهاب - يجب أن يتم تجميع كلا من التعليمات البرمجية وتعزز كلا من التعليمات البرمجية على إصدار CRT الذي تريد استخدامه.

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