2009-10-17 11 views
5

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

मैं अपने विजुअल सी ++ 2008 ऐप को सी रनटाइम लाइब्रेरी के बिना काम करने की कोशिश कर रहा हूं। यह एमएफसी या अन्य फैंसी सामान के बिना एक Win32 जीयूआई ऐप है, बस सादा विंडोज एपीआई।

इसलिए मैंने प्रोजेक्ट प्रॉपर्टीज सेट किया -> कॉन्फ़िगरेशन -> सी/सी ++ -> उन्नत -> हां में डिफ़ॉल्ट लाइब्रेरी नाम छोड़ें (कंपाइलर ध्वज /Zl) और पुनर्निर्मित। आइए दिखाएं कि मैंने एक उपयुक्त एंट्री पॉइंट फ़ंक्शन लिखा है, जो my other question.

का विषय है, मुझे दो लिंकर त्रुटियां मिलती हैं; वे शायद संबंधित हैं। लिंकर foobar.obj में अनसुलझे बाहरी प्रतीकों __fltused और _memcpy के बारे में शिकायत करता है। कहने की जरूरत नहीं है, मैं अपने कार्यक्रम में स्पष्ट रूप से उपयोग नहीं करता, लेकिन मैं में memcpy का उपयोग करता हूं। (मैं CopyMemory इस्तेमाल किया होगा, लेकिन यह पता चला है #definememcpy के समान होने के लिए ...)

(मैंने सोचा कि मैं एक संकलक आंतरिक उपयोग करते हुए, #pragma intrinsic(memcpy) तरह से memcpy समस्या से छुटकारा मिल सकता है, लेकिन यह बनाता है कोई फर्क नहीं।)

अगर मैं पूर्वप्रक्रमक उत्पादन को देखो (संकलक कमांड लाइन के लिए /P जोड़ने), मैं या तो __fltused या foobar.i में _memcpy करने के लिए कोई संदर्भ देखें।

तो, मेरा प्रश्न है: ये लिंकर त्रुटियां कहां से आती हैं, और मैं उन्हें कैसे हल करूं?

+0

और आपका प्रश्न है? –

+0

आह ... किसी भी तरह से इस चीज़ को दो में विभाजित करते समय खो दिया होगा। इसे फिर से जोड़ा, धन्यवाद! – Thomas

उत्तर

8

__fltused का तात्पर्य है कि आप कम से कम कुछ फ्लोट या युगल घोषित कर रहे हैं या कम से कम घोषित कर रहे हैं। कंपाइलर इस 'बेकार' प्रतीक को इंजेक्ट करता है ताकि एक फ्लोटिंग सपोर्ट .obj को सीआरटी से लोड किया जा सके। आप इस के आसपास बस नाम

#ifdef __cplusplus 
extern "C" { 
#endif 
int __fltused=0; 
#ifdef __cplusplus 
} 
#endif 

WRT _memcpy के साथ एक प्रतीक की घोषणा के द्वारा प्राप्त कर सकते हैं - memcpy एक __cdecl समारोह है, और सभी cdecl कार्यों एक स्वत: प्राप्त _ उनकी सजावट के हिस्से के रूप। इसलिए, जब आप "__cdecl memcpy" कहते हैं - संकलक & लिंकर '_memcpy' नामक प्रतीक की तलाश में जाता है। आंतरिक कार्यों - यहां तक ​​कि स्पष्ट रूप से अनुरोध किया गया है - यदि बिल्ड सेटिंग्स में डीबग सेटिंग्स हैं जो अंतर्निहित संकेतों को इंगित करती हैं तो अभी भी आयात किया जा सकता है। तो आपको किसी भी समय अपने स्वयं के memcpy और संबंधित कार्यों को लागू करने की आवश्यकता होगी।

+0

त्वरित उत्तर के लिए धन्यवाद! दुर्भाग्यवश, '__fltused' चाल मेरे लिए कुछ भी नहीं प्रतीत होती है। मैंने 'foobar.cpp' के शीर्ष पर 'int __fltused = 0;' रखा है; स्थैतिक या गैर स्थैतिक कोई अंतर नहीं करता है। – Thomas

+0

इसके अलावा, मुझे पूरा यकीन है कि मैं कहीं भी किसी भी फ्लोट या युगल का उपयोग नहीं कर रहा हूं। मेरे स्रोत पेड़ में ये शब्द नहीं हैं। – Thomas

+0

आह, इसे 'बाहरी "सी में लपेटकर" चाल चल रही थी। धन्यवाद! – Thomas

0

मैं एक बार foobar.cpp के लिए "असेंबली लिस्टिंग उत्पन्न करें" (या कुछ ऐसे) कंपाइलर विकल्प को सेट करने की सलाह देता हूं, और उसके बाद असेंबलर कोड का निरीक्षण करता हूं। यह वास्तव में आपको बताएगा कि इन प्रतीकों का उपयोग कहाँ किया जाता है।

+0

मैं बिल्कुल एक x86 असेंबलर गुरु नहीं हूँ। लेकिन अगर मैं उपकरण को समझ सकता हूं, तो मैं इसे कल कोशिश कर सकता हूं। – Thomas

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

  • कोई संबंधित समस्या नहीं^_^