2010-07-08 6 views
5

जब रिलीज निर्माण में मेरी dll जोड़ने मैं -कुलपति ++/DEFAULTLIB मुद्दा

1> लिंक: LNK4098 चेतावनी: defaultlib अन्य libs के उपयोग के साथ 'mfc80d.lib' संघर्ष; उपयोग/NODEFAULTLIB: पुस्तकालय

1> लिंक: चेतावनी LNK4098: defaultlib अन्य libs के उपयोग के साथ 'mfcs80d.lib' संघर्ष; उपयोग/NODEFAULTLIB: पुस्तकालय

1> लिंक: चेतावनी LNK4098: defaultlib अन्य libs के उपयोग के साथ 'msvcrtd.lib' संघर्ष; उपयोग/NODEFAULTLIB: पुस्तकालय

जोड़ने/वर्बोज़, मैं देख रहा हूँ निम्नलिखित (स्निपेट): ...

1> सर्च कर रहे हैं डी: \ माइक्रोसॉफ्ट विजुअल स्टूडियो 8 \ कुलपति \ atlmfc \ lib \ mfc80d.lib:

1> मिला "सार्वजनिक: आभासी __thiscall AFX_MODULE_STATE :: ~ AFX_MODULE_STATE (शून्य)" (?? 1AFX_MODULE_STATE @@ संयुक्त अरब अमीरात @ XZ) 1>
mfcs80.lib में संदर्भित (dllmodul .obj) 1> लोडेड mfc80d.lib (MFC80D.DLL)

1> मिला "लंबे stdcall AfxWndProc (struct HWND__ *, अहस्ताक्षरित पूर्णांक, अहस्ताक्षरित int, लंबे समय से)" (? AfxWndProc @@ YGJPAUHWND __ @@ IIJ @ जेड)

1> mfcs80.lib में संदर्भित (dllmodul.obj) 1> लोडेड mfc80d.lib (MFC80D.DLL)

...

यदि मैं इसे सही तरीके से व्याख्या कर रहा हूं, तो इसका मतलब यह है कि लिंकर (ऑप्टिमाइज्ड) लाइब्रेरी mfcs80 से कॉल को हल करता है, जैसा कि (गैर-अनुकूलित) लाइब्रेरी mfc80D में कॉल करता है। यह कैसे हो सकता है??

जब मैं /NODEFAULTLIB:mfc80d.lib जोड़ता हूं तो चेतावनियां चली जाती हैं, लेकिन मैं अभी तक इसके साथ शांत नहीं हूं। एक तरफ के रूप में, मॉड्यूल वास्तव में वृद्धिशील लिंक पर स्पोरैडिक अतुलनीय दुर्घटनाओं से पीड़ित होता है, जिसे केवल पुन: निर्माण द्वारा हल किया जाता है। मैं वीएस2005 का उपयोग कर रहा हूँ।

[संपादित करें]] DEFAULTLIB को शामिल करने के लिए शीर्षक बदल दिया, उम्मीद है कि इस विषय पर बेहतर ध्यान केंद्रित करें। मैं एक स्पष्ट रेखा

संसाधित /DEFAULTLIB:mfc80d.lib

/वर्बोज़ आउटपुट में

कह देखते हैं , कई अन्य (गैर डिबग) डिफ़ॉल्ट libs के बीच में। यह कहां से आता है? मैं इसे कैसे ठीक करूं?

धन्यवाद!

उत्तर

2

समस्या को बाद में हल किया गया था - अगर मैं इसे किसी दिन किसी की मदद करता हूं तो इसे यहां पोस्ट करता हूं।

यह गलत प्रीकंपिल्ड हेडर पथ साबित हुआ: रिलीज कॉन्फ़िगरेशन डिफ़ॉल्ट डीबग पीसीएच पथ की ओर इशारा करता है। इसलिए डिबग से रिलीज होने के संक्रमण पर, एक बिल्ड सभी डीबग पीसीएच सामग्रियों में खींच जाएगा - स्पष्ट रूप से एमएफसी #pragma (टिप्पणी "lib ..") के कुछ डीबग संस्करणों सहित (afx शीर्षकों में शामिल)। एक स्वच्छ निर्माण पीसीएच को सही ढंग से पुनर्निर्माण करेगा, लेकिन फिर डीबग फ़ोल्डर में - जिससे संक्रमण को डीबग बनाने के लिए संक्रमण पर समान समस्याएं पैदा होती हैं।

2

आपको अपनी परियोजनाओं के लिए रन-टाइम लाइब्रेरी सेटिंग्स की जांच करनी चाहिए, जैसे आपके पास मेल नहीं है।

  • मल्टी-थ्रेडेड
  • मल्टी-थ्रेडेड डीबग
  • मल्टी-थ्रेडेड DLL
  • मल्टी-थ्रेडेड डीबग: C/C++> कोड जनरेशन> रनटाइम लाइब्रेरी, आप विकल्प हैं के तहत अपनी परियोजना सेटिंग्स में डीएलएल

ऐसा लगता है जैसे आपके समाधान में कुछ परियोजनाएं डीबग संस्करण का उपयोग कर सकती हैं जबकि अन्य गैर-डीबग संस्करण का उपयोग कर सकते हैं। या वैकल्पिक रूप से, कुछ परियोजनाएं डीबग संस्करण का उपयोग कर सकती हैं जबकि अन्य डीबग डीएलएल संस्करण का उपयोग कर रहे हैं। किसी दिए गए समाधान कॉन्फ़िगरेशन के लिए, आप सभी परियोजनाओं को एक ही सेटिंग का उपयोग करना चाहते हैं।

+0

धन्यवाद - लेकिन मैं सभी परियोजनाओं (और सभी अलग-अलग फ़ाइलों) की जाँच की, और वे सभी/प्रबंध निदेशक के साथ संकलित कर रहे हैं। मेरे पास बहुत कम बाहरी निर्भरताएं हैं: version.dll, shlwapi.dll और एक तृतीय पक्ष घटक जिसे मैंने निर्भरता-वॉकर के साथ निरीक्षण किया और उचित सीआरटी संस्करणों (गैर-डीबग) से लिंक करना प्रतीत होता है। क्या/एमडी स्विच वास्तव में/DEFAULTLIB स्विच के लिए एकमात्र पहुंच है? क्या कोई और इनपुट नहीं है जो इसे गड़बड़ कर सकता है? –

0

इसका मतलब है कि एक निर्भर डीएलएस को अलग-अलग run-time library के साथ संकलित किया गया है।

परियोजना -> गुण -> C/C++ -> कोड generaion -> सभी पुस्तकालयों से अधिक रनटाइम लाइब्रेरी

जाओ और देखते हैं कि वे उसी तरह से संकलित कर रहे हैं। इस कड़ी में इस त्रुटि के बारे

अधिक:

warning LNK4098: defaultlib "LIBCD" conflicts with use of other libs

+0

जैसा कि मैंने @bhields (समान) उत्तर पर टिप्पणी की है, मैंने यहां पोस्ट करने से पहले जांच की है। अंतिम समस्या स्रोत के लिए अपना स्वयं का (~ 1 साल बाद) उत्तर देखें। –