2015-07-21 9 views
9

मैं विजुअल स्टूडियो में मिंगव के साथ संकलित लाइब्रेरी का उपयोग करने की कोशिश कर रहा हूं।विजुअल स्टूडियो 15 __imp___iob, __imp___pctype, __imp___mb_cur_max

LNK2001 त्रुटि: __imp___iob

त्रुटि LNK2019 अनसुलझे बाह्य प्रतीक: अनसुलझे बाह्य प्रतीक __imp___pctype समारोह में संदर्भित

त्रुटि LNK2019: हालांकि, मैं निम्नलिखित लिंकर त्रुटियों मिल अनसुलझे बाह्य प्रतीक समारोह में संदर्भित __imp____mb_cur_max

LNK2001 त्रुटि:

_fprintf अनसुलझे बाह्य प्रतीक

मैं इस पोस्ट के अनुसार legacy_stdio_definitions.lib के खिलाफ लिंक करके _fprintf त्रुटि को ठीक करने में सक्षम था: unresolved external symbol __imp__fprintf and __imp____iob_func, SDL2

हालांकि, मुझे नहीं पता कि अन्य तीन अनसुलझे बाहरीों को कैसे ठीक किया जाए। मैं इसे कैसे ठीक करूं? पुस्तकालयों दृश्य स्टूडियो के तहत पूरी तरह से काम 2013

संपादित करें:

यहाँ ठीक एक अद्यतन है। मैंने mingw lib फ़ोल्डर से libigsvcrt.a को विजुअल स्टूडियो में ले जाया, और मैंने लिंकर सेटिंग्स में जोड़ा। अब यह सही ढंग से काम करता प्रतीत होता है।

+0

MinGW टीम के काम का एक समूह उनके ज फ़ाइलें सीआरटी की VS2015 संस्करण के साथ संगत बनाने के लिए क्या करना पड़ता है। इसके लिए अपनी सांस न पकड़ें, आप शायद थोड़ी देर के लिए वीएस2013 संस्करण के साथ फंस जाएंगे। –

+0

नीचे दिए गए उत्तर को चिह्नित करने से पहले, क्या यह काम करने के लिए कोई त्वरित हैक है? इसके अनुसार: http://stackoverflow.com/questions/30412951/unresolved-external-symbol-imp-fprintf-and-imp-iob-func-sdl2, कोई __imp___iob त्रुटि को हल कर सकता है ताकि __imp___iob को किसी प्रकार का लौटाया जा सके सरणी। कोई अन्य दो लिंकर त्रुटियों को ठीक करने के बारे में कैसे जाएगा और यह सरणी कैसे परिभाषित की जाएगी? –

+2

आप सी रनटाइम कार्यों को बस निदान करने के लिए बहुत मुश्किल में तोड़ देंगे। वहां मत जाओ –

उत्तर

5

पुस्तकालयों को सीआरटी के पुराने संस्करण के खिलाफ संकलित किया गया था। आपके द्वारा प्राप्त किए गए अनसुलझे प्रतीक सीआरटी के आंतरिक प्रतीक हैं जो संकलित लाइब्रेरी में मौजूद हैं। आपको वीएस2015 सीआरटी (यूनिवर्सल सीआरटी) के खिलाफ लाइब्रेरी को दोबारा बनाना होगा। लेकिन मुझे यकीन नहीं है कि क्या मिनजीडब्ल्यू इसका समर्थन करता है।

यदि आप ऐसा नहीं कर सकते हैं, तो आपको VS2013 कंपाइलर का उपयोग करना जारी रखना होगा। (आप प्रोजेक्ट विकल्पों में टूलसेट को बनाम2013 पर सेट करके VS2015 आईडीई का उपयोग कर सकते हैं। लेकिन आप अभी भी 2013 कंपाइलर का समर्थन करने वाली सी ++ सुविधाओं तक ही सीमित रहेंगे।)

+0

मान लीजिए कि मुझे mingw अपडेट होने तक प्रतीक्षा करनी होगी। मेरी इच्छा है कि विजुअल स्टूडियो की मेकफ़ाइल परियोजना क्षमता का उपयोग करके इन libs को बनाने का कोई तरीका था, लेकिन मुझे काम करने के लिए ./configure नहीं मिल सकता है। –

+0

ठीक है यहाँ एक अपडेट है। मैंने mingw lib फ़ोल्डर से libigsvcrt.a को विजुअल स्टूडियो में ले जाया, और लिंकर सेटिंग्स में जोड़ा। अब यह सही ढंग से काम करता प्रतीत होता है। क्या ऐसा करने के लिए कोई नुकसान है? किसी को भी mingw के libgcc.a को वीएस में जोड़ना है ताकि किसी भी तरह से mingw के साथ संकलित lib का उपयोग करने में सक्षम हो, इसलिए मुझे विश्वास नहीं है कि –

+0

हां। नकारात्मकता यह है कि पुस्तकालय और आपका कार्यक्रम विभिन्न सीआरटी का उपयोग कर रहे हैं। कुछ और रोचक प्रभाव हो सकते हैं: यदि लाइब्रेरी मॉलोक को कॉल करती है, तो आपके प्रोग्राम द्वारा उस पॉइंटर पर मुफ़्त में कॉल करने के लिए कॉल क्रैश हो सकता है, या इसके विपरीत; पुस्तकालय और आपके कार्यक्रम में अलग-अलग वैश्विक लोकेशन हैं। –

2

मुझे एक ही समस्या का सामना करना पड़ा (लाइब्रेरी स्थिर के साथ संकलित

  • लिंकर> इनपुट> ध्यान न दें विशिष्ट डिफ़ॉल्ट पुस्तकालयों: DLL में सीआरटी) के बजाय CRT और मैं इसे प्रोजेक्ट गुण में दो निम्नलिखित मानकों को बदल कर काम करने में कामयाब रहे libc.lib
  • सी/सी ++> कोड जनरेशन> रनटाइम लाइब्रेरी: बहु थ्रेडेड डीबग (/ एमटीडी)

अगर वह पर्याप्त नहीं है, वहाँ निम्नलिखित पृष्ठ पर और जानें: https://social.msdn.microsoft.com/Forums/en-US/841e5723-bce4-4340-b7b3-027dcdf90f00/

संबंधित मुद्दे