سؤال

هذا هو ويندوز تطبيق وحدة التحكم (في الواقع) والتي السابقة الرجل بنيت منذ 4 سنوات و يتم تثبيت وتشغيله.أنا الآن في حاجة إلى إجراء بعض التغييرات ولكن لا يمكن بناء حتى الإصدار الحالي!هنا هو بناء الإخراج:

--------------------Configuration: MyApp - Win32 Debug--------------------
Compiling resources...
Compiling...
Main.cpp
winsock.cpp
Linking...
LINK : warning LNK4098: defaultlib "LIBCMTD" conflicts with use of other libs; use /NODEFAULTLIB:library
Main.obj : error LNK2001: unresolved external symbol _socket_dontblock
Debug/MyApp.exe : fatal error LNK1120: 1 unresolved externals
Error executing link.exe.

MyApp.exe - 2 error(s), 1 warning(s)
--------------------------------------------------------------------------

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

--- أليستر.

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

المحلول 2

عذرا، هذا إذا ما تبين أن مشكلة داخلية. مزيج من المبرمج مستقل منذ 4 سنوات وصدئ لا لا شيء (لي!) الآن.

والرمز لا تستخدم _socket_noblock ولكن على لا استخدام socket_noblock وأنا فقط بحاجة لربط واحدة من المكتبات الخاصة بنا.

نصائح أخرى

LNK4098 قد لا يكون مشكلة.على سبيل المثال ، يمكن أن يحدث إذا كنت رابط ضد إصدار بعض المكتبات التي تستخدم ساكنة وقت الربط ويسبب LIBCMT (ملاحظة absense من "د" لاحقة) تضاف إلى مكتبات الافتراضي.التطبيق الخاص بك ، يجري بناؤها في تصحيح التكوين ، يستخدم LIBCMTD, وبالتالي الصراع.قد يكون في الواقع آمنة ، شريطة أن يتم تبادل أي وقت التشغيل تعتمد مع هذه المكتبة.

أما بالنسبة _socket_noblock, يمكنك استخدام بعض أداة البحث (مثل البقرى أو البحث) للبحث في هذه السلسلة .obj .ليب الملفات.بهذه الطريقة سوف نعرف أي مكتبة المراجع الرمز ، والتي قد تكون نقطة انطلاق لاكتشاف ما تبعيات تلك المكتبة.

يمكنك استخدام "التبعية ووكر" - أداة مجانية للعثور على تبعيات من التطبيق الخاص بك لمعرفة كيفية التطبيق الخاص بك هو ربط libcmtd.تحرير: لا يمكنك بالطبع استخدام ذلك على الإصدار الجديد الذي فشل في الارتباط (انظر التعليقات), ولكن يمكنك استخدامه على النسخة القديمة ، أو في المكتبات المعروفة أن الإصدار الجديد الروابط مع.

ومع ذلك ، فإن المشكلة الحقيقية لا علاقة لها بأي شيء اقترحت ولعل السؤال يجب أن تكون مغلقة.

يبدو أنك تربط بين الإصدارات المختلفة من CRT - ربما لأنك تستخدم القديمة بنيت المكتبات مع جديد مترجم و نسخة من CRT.

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

(إعدادات المشروع) (c++ التبويب) الفئة (رمز جيل) (استخدام مكتبة وقت التشغيل)

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