2012-02-10 11 views
5

मेरे पास एक स्रोत फ़ाइल है जो मैं -E और -P विकल्पों का उपयोग करके प्रीप्रोसेस कर रहा हूं (VxWorks- आधारित एम्बेडेड प्लेटफ़ॉर्म के लिए जीसीसी 4.1.2 का उपयोग करके)। अन्य सभी विकल्प वैसे ही हैं जब मैं फ़ाइल संकलित करता हूं। ये विकल्प हैं:पहले प्रीप्रोसेस्ड फ़ाइल संकलित आउटपुट

-Wall 
-march=pentium 
-nostdinc 
-O0 
-fno-builtin 
-fno-defer-pop 
-g 
-c 
-o 

साथ ही साथ सभी शामिल पथ। अब जब मैं इस प्रीप्रोसेस्ड फ़ाइल को संकलित करता हूं, तो जब मैं मूल को संकलित करता हूं तो परिणामस्वरूप ऑब्जेक्ट-फ़ाइल बहुत छोटी (लगभग 30%) होती है। और जब मैं प्रोग्राम को लिंक करता हूं, तो लिंकर गुम प्रतीकों (सभी उपयोगकर्ता-कोड में) के बारे में शिकायत करता है, जो मूल स्रोत फ़ाइल का उपयोग करते समय फिर से नहीं होता है। ये अंतर क्यों है? क्या यह काम करने का कोई तरीका है?

उत्तर

1

आप सुनिश्चित करें कि आप किसी भी लापता नहीं कर रहे हैं -D अपने कमांड लाइन से परिभाषित करता है कर रहे हैं? आपका परिणाम सशर्त होने के कारण संकलित नहीं किए जा रहे हिस्सों के अनुरूप होगा।

एक और संभावना है (जब से तुम संकलक विशेष रूप से नाम नहीं) है कि आप अपने vxWorks पर्यावरण के लिए कट्टर विशिष्ट पार संकलक से एक सामान्य gcc -E उपयोग कर रहे हैं बल्कि है। क्रॉस-जीसीसी कुछ चर को पूर्वनिर्धारित करेगा जिसे आपको के लिए आवश्यकता होगी।

+0

मैं नियम को संशोधित कर रहा हूं जो किसी भी चीज़ को हटाए बिना '-E'- और' -P'-flag को जोड़कर ऑब्जेक्ट-फ़ाइल बनाता है, इसलिए मुझे पूरा यकीन है कि मैं सही कंपाइलर का उपयोग कर रहा हूं और सभी को परिभाषित करता है –

1

प्रीप्रोसेस्ड आउटपुट को संकलित करते समय, -fpreprocessed विकल्प को पार करने का प्रयास करें ताकि जीसीसी को फिर से प्रोप्रोसेस न करने के लिए कहा जा सके।

एकमात्र अंतर जो मैं सोच सकता हूं वह मैक्रोज़ है जिसके परिणामस्वरूप एक पहचानकर्ता का विस्तार हो रहा है जो पहले से ही विस्तारित हो चुका है - प्रीप्रोसेसर उस बिंदु पर विस्तार रोकता है, लेकिन यदि आप फिर से प्रीप्रोसेसर चलाते हैं, तो पहचानकर्ता होगा फिर से विस्तारित मैं शायद किसी भी उदाहरण के लिए एक कंपाइलर त्रुटि का कारण होने की उम्मीद करता, लेकिन कौन जानता है?

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