ما المكتبات التي أحتاجها لربط تطبيقي ذو الوضع المختلط؟

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

  •  08-06-2019
  •  | 
  •  

سؤال

أقوم بدمج دعم .NET في تطبيق C++ الخاص بنا.
إنه تطبيق MFC قديم، مع ملف إضافي واحد تم تجميعه باستخدام خيار "/clr" الذي يشير إلى CWinFormsControl.

لا يُسمح لي بإزالة علامة الرابط "/NODEFAULTLIB".
(لدينا نظام إدارة البناء الخاص بنا، وليس نظام Visual Studio.)
هذا يعني أنه يجب علي تحديد جميع المكتبات الضرورية:وقت تشغيل VC وMFC.

تتضمن خيارات المترجم الأخرى "/MD"

بجانب ذلك:لا يمكنني استخدام علامة الرابط "/FORCE:MULTIPLE" وأضفها فقط كل شئ:
أنا أبحث عن مجموعة غير متداخلة من المكتبات.

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

المحلول 3

كيف قمت بحلها:

  1. اربط بـ "/FORCE:MULTIPLE /verbose" (الذي يرتبط جيدًا) وقم بتعيين الإخراج جانبًا.
  2. اربط بـ "/NODEFAULTIB /verbose" وتتبع كل ما لم يتم حله في مخرجات الخطوة السابقة وأضف المكتبات 1 × 1.
  3. وأدى ذلك إلى مضاعفة:"AAA.lib:XXX محدد بالفعل في BBB.lib"
  4. ثم حصلت عليه أخيرًا:وحدات مُدارة وغير مُدارة مع /md وترابط إلى (من بين أمور أخرى):mscore.lib msvcmrt.lib mfcm80d.lib

تبين أن الخلط بين /MT (غير مُدار) و/MD (مُدار) هو فكرة سيئة:هناك حاجة إلى مكتبات مختلفة (متداخلة).

@أجريان:يخبرني Dependcy Walker فقط بملفات dll المستخدمة، وليس بالمكتبات المرتبطة بها عند الارتباط.(على سبيل المثالmsvcmrt.lib؟) أعتقد.

شكرا على الإجابات!

يناير

نصائح أخرى

كحد أدنى:

mscore.lib msvcrt.lib mfc90.lib (اضبط الإصدار بشكل مناسب)

وتكرر من هناك.

استخدم AppWizard لإنشاء تطبيق MFC بسيط بأسلوبك (SDI / MDI / مربع الحوار) ثم ضع على عاتقك.

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