ما المكتبات التي أحتاجها لربط تطبيقي ذو الوضع المختلط؟
-
08-06-2019 - |
سؤال
أقوم بدمج دعم .NET في تطبيق C++ الخاص بنا.
إنه تطبيق MFC قديم، مع ملف إضافي واحد تم تجميعه باستخدام خيار "/clr" الذي يشير إلى CWinFormsControl.
لا يُسمح لي بإزالة علامة الرابط "/NODEFAULTLIB".
(لدينا نظام إدارة البناء الخاص بنا، وليس نظام Visual Studio.)
هذا يعني أنه يجب علي تحديد جميع المكتبات الضرورية:وقت تشغيل VC وMFC.
تتضمن خيارات المترجم الأخرى "/MD"
بجانب ذلك:لا يمكنني استخدام علامة الرابط "/FORCE:MULTIPLE" وأضفها فقط كل شئ:
أنا أبحث عن مجموعة غير متداخلة من المكتبات.
المحلول 3
كيف قمت بحلها:
- اربط بـ "/FORCE:MULTIPLE /verbose" (الذي يرتبط جيدًا) وقم بتعيين الإخراج جانبًا.
- اربط بـ "/NODEFAULTIB /verbose" وتتبع كل ما لم يتم حله في مخرجات الخطوة السابقة وأضف المكتبات 1 × 1.
- وأدى ذلك إلى مضاعفة:"AAA.lib:XXX محدد بالفعل في BBB.lib"
- ثم حصلت عليه أخيرًا:وحدات مُدارة وغير مُدارة مع /md وترابط إلى (من بين أمور أخرى):mscore.lib msvcmrt.lib mfcm80d.lib
تبين أن الخلط بين /MT (غير مُدار) و/MD (مُدار) هو فكرة سيئة:هناك حاجة إلى مكتبات مختلفة (متداخلة).
@أجريان:يخبرني Dependcy Walker فقط بملفات dll المستخدمة، وليس بالمكتبات المرتبطة بها عند الارتباط.(على سبيل المثالmsvcmrt.lib؟) أعتقد.
شكرا على الإجابات!
يناير
نصائح أخرى
كحد أدنى:
mscore.lib msvcrt.lib mfc90.lib (اضبط الإصدار بشكل مناسب)
وتكرر من هناك.
استخدم AppWizard لإنشاء تطبيق MFC بسيط بأسلوبك (SDI / MDI / مربع الحوار) ثم ضع على عاتقك.