كيفية تطبيق C ++ برنامج التحويل البرمجي لاستخدام إصدار CRT معين؟

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

سؤال

أنا أستخدم VS2008 لتطوير DLL COM الذي يستخدمه الافتراضي إصدار CRT 9 ولكني أستخدم TSF (إطار خدمة النص) غير متوافق مع CRT الجديد. أعتقد أن الحل هو استخدام واحد متوافق، فكيف يمكنني تحديد إصدار CRT؟

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

المحلول

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

أولا تأكد من بيان ليس تم إنشاؤه على كل بناء (على VS2005: خصائص التكوين / ملف الرابط / الوضوح / إنشاء بيان)، كما هو الحال في الكتابة فوق التغييرات اليدوية الخاصة بك. تأكد أيضا من تمكين هذه العزلة. بعد ذلك، يجب أن يكون تحديد موقع ملف البيان - في $ (INTDIR) (على سبيل المثال، تصحيح). يجب أن ترى قسم مشابه ل -

  <dependency>
    <dependentAssembly>
      <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
    </dependentAssembly>
  </dependency>

(لبناء تصحيح، بالطبع). تحتاج إلى تحرير إصدار الإصدار والسمات العامة لعنصر CRT. يمكنك فحص الملفات في مجلد Windows Winsxs المحلي لرؤية الإصدارات المتاحة. يفحص هنا كيفية استخراج PublickeyToken بمجرد العثور على الإصدار الذي تريده. (على الرغم من أنني سأحاول أولا أن ننظر مباشرة إلى مظهر من المشاريع الأخرى، ارتبط بإصدار CRT المرغوب فيه).

إذا ذهبت إلى هناك، توقع بعض الماء الخام. قد يكون لديك بعض الحظ إذا كان تطبيقك هو تطبيق وحدة التحكم لا يربط مقابل مكونات أخرى جنبا إلى جنب (MFC، OpenMP، إلخ). إذا كان طلبك غير تافه، فستفاجأ إذا لم يكن هناك بعض تبعيات الإصدار المعقدة أمونت مكونات SXS.

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

نصائح أخرى

ستكون أسهل طريقة لبناء DLL الخاص بك مع إصدار VC ++ يستخدم CRT المتوافق مع TFS.

لا أعتقد أنها فكرة جيدة فقط لربط DLL الخاص بك مع إصدار مختلف من CRT، إلا إذا كنت تستخدم أيضا نفس الإصدار من ملفات الرأس. وأسهل طريقة للقيام بذلك ستكون لاستخدام نسخة VC ++ المناسبة ...

إذا كنت لا تزال ترغب في المحاولة، يمكنك:

  • انتقل إلى "إعدادات التكوين-> Linker-> Input-> تجاهل مكتبة محددة" وأدخل CRT الذي تستخدمه (libc.lib، libcmt.lib، إلخ. انظر هذا قانون مشروع القانون للتفاصيل).
  • أدخل اسم إصدار CRT الذي تريد استخدامه في "إعدادات التكوين -> الرابط-> الإدخال -> التبعيات الإضافية"، ومسارها في "إعدادات التكوين-> روابط -> عامة -> أدلة مكتبة إضافية".

يمكنك أيضا محاولة تغيير الدلائل الافتراضية في "الأدوات-> الخيارات-> المشاريع والحلول-> الدلائل VC ++-> ملفات المكتبة". ربما تغيير $ (vcinstalldir) Lib إلى المسار الذي توجد فيه إصدار آخر من CRT يقيم الخدعة

لا تحاول استخدام VS9 وربطها بإصدار آخر من CRT.

إذا كنت بحاجة إلى الارتباط إلى CRT آخر، فقل CRT VS8، ثم يجب عليك ترجمة وربط تطبيقك في هذا الإصدار من مقابل.

حل الحل بالنسبة لي مع Visual Studio Express 2013 X64 + OpenCV 2.4.9 X64 جمعت، تصحيح (ICT ICT INTER في LV2013 X64)، ولكن يجب أن يعمل لأي إصدار VS آخر:

1) انقر بزر الماوس الأيمن فوق الحل الخاص بك> خصائص> ملفات مصدر التصحيح ...

2) هناك ربما اثنين من الدولارات (اعتمادا على دليل vs- التثبيت الخاص بك) ... C: ملفات البرنامج (X86) Microsoft Visual Studio 12.0 Common7 IDE VC7 ATLMFC C: ملفات البرنامج (x86) Microsoft Visual Studio 12.0 Common7 IDE VC7 CRT

مع هؤلاء سيعملون في Visual Studio 2013 Express ولكن يجب أن تعمل أيضا من أجل 2013 آخر 2013. إذا كنت قد حصلت على Visual Studio 10 أو 11 فقط اكتب "Microsoft Visual Studio 11.0" أو 10.0 في كل منها. يمكنك أيضا إضافتها فقط.

هذه الإدخالات التي يمكنك الحصول عليها من OpenCV.SLN ضمن الحل> خصائص> ملفات المصدر Debug (كما هو موضح أعلاه). وعلى النحو المنخفضة بالفعل: يحتاج CRT إلى المباراة ... يحدث هذا في هذا المكان.

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