2011-11-07 10 views
5

में मैं कैसे math.h में परिभाषित स्थिरांक जुड़े हुए हैं के बारे में एक प्रश्न है।_HUGE और __IMP__HUGE "math.h"

दृश्य स्टूडियो 2010 में, मैं "एमडी" है कि "HUGE_VAL" का उपयोग करने के एक तीसरी पार्टी पुस्तकालय का उपयोग करता है के साथ एक 64-बिट dll C++ लाइब्रेरी बनाना रहा हूँ। हेडर "math.h" से, ऐसा लगता है कि "HUGE_VAL" को "_HUGE" के रूप में परिभाषित किया गया है। जब मैं बनाने की कोशिश, एक जोड़ने त्रुटि परिणाम

LNK2001 त्रुटि: अनसुलझे बाह्य प्रतीक _HUGE

कुछ Googling करने के बाद, मुझे लगता है कि _HUGE msvcrt.lib में परिभाषित किया जाना चाहिए। MSVCRT.lib लिंक है, लेकिन मैंने libcmt.lib को लिंक नहीं किया क्योंकि यह पुनः परिभाषा त्रुटियों का कारण बन जाएगा।

क्या मुझे अजीब के रूप में हमलों कि जब मैं एक साधारण सांत्वना कार्यक्रम HUGE_VAL उपयोग करता है और अत्यधिक शब्द का उपयोग/एक लिंकर विकल्प के रूप में है कि बनाने के लिए, यह पता चलता है _ छोटा सा भूत _HUGE जोड़ा जा रहा है।

क्या मैं वास्तव में उत्सुक हूँ किस चरण _HUGE में _ छोटा सा भूत _HUGE बारी करता है? साथ ही, किसी और को अनसुलझा _HUGE त्रुटि मिली है और क्या किसी के पास कोई विचार है कि इसे कैसे ठीक किया जा सकता है?

लंबे प्रश्न पढ़ने और किसी भी विचार के लिए धन्यवाद।

+0

मुझे विजुअल स्टूडियो के बारे में कुछ नहीं पता (मैं केवल लिनक्स पर जीसीसी का उपयोग कर रहा हूं) लेकिन HUGE_VAL मानक है। शायद आपको अपने कंपाइलर से नए मानक का सख्ती से पालन करने की आवश्यकता है? –

+2

आप .obj/.lib फ़ाइलों को मिश्रित कर रहे हैं जिन्हें/MT के साथ संकलित किया गया था। आप मिश्रण नहीं कर सकते, सभी लिंक किए गए कोड को एक ही सेटिंग का उपयोग करने की आवश्यकता है। –

उत्तर

2

मैंने इस समस्या को वीसी 11.0 के साथ अनुभव किया है। मुझे प्राप्त एकमात्र त्रुटि एक अनसुलझा प्रतीक _HUGE त्रुटि है।

मैं गतिशील बहु-थ्रेडेड रन टाइम पुस्तकालयों से जुड़ रहा हूं और मुझे पता चला कि अगर मैं अपने लिंक चरण में "libcmt.lib" शामिल करना चाहता हूं, तो समस्या हल हो जाती है (या आसपास काम किया जाता है)।

मैं कैसे हेडर सुराग के लिए एसडीके में परिभाषित किया गया में तलाश शुरू कर दी है और पाया है कि मैं अपने संकलन चरणों में एक संकलक पूर्व निर्देशिका याद आ रही थी: _DLL।

जब आप गतिशील रन समय के साथ निर्माण पुस्तकालयों _HUGE चर __declspec (dllimport) होने की जरूरत है, तो यह पाया जा सकता है। जब आप पूर्व-निर्देश के रूप में _DLL को सेट किए बिना "math.h" -> "crtdefs.h" शामिल करते हैं, तो वेरिएबल __declspec (dllimport) 'ed नहीं होगा और लिंक समय पर अनुपलब्ध दिखाई देगा।

मैं क्योंकि मैं अपने स्वयं के कस्टम makefiles साथ संकलन रहा हूँ और मैं _DLL पूर्व निर्देश जोड़ने के लिए उपेक्षित था इस मुद्दे हो रही थी। मेरे संकलन चरण में -D_DLL जोड़ना संकलित समस्या को हल करता है जिसमें कोई अन्य परिवर्तन आवश्यक नहीं है।

मैं जानता हूँ कि इस सूत्र पुराना है, लेकिन सोचा मैं वहाँ इसे बाहर फेंक के रूप में यह एक समान मुद्दे के साथ किसी की मदद कर सकते हैं होगा।

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