2010-11-15 11 views
8

मैं अपने प्रोजेक्ट में कुछ कोड को एक अलग पुस्तकालय में विभाजित कर रहा हूं ताकि किसी अन्य एप्लिकेशन में पुन: उपयोग किया जा सके। इस नई पुस्तकालय में विभिन्न कार्यों परिभाषित हैं लेकिन लागू नहीं, और मेरी वर्तमान परियोजना और अन्य एप्लिकेशन दोनों इन कार्यों के अपने संस्करणों को लागू करेंगे।मैं उन कार्यों को संकलित करने के लिए जीसीसी को कैसे मजबूर कर सकता हूं जिनका उपयोग नहीं किया जाता है?

मैंने इन कार्यों को अपनी मूल परियोजना में लागू किया, लेकिन उन्हें इसके अंदर कहीं भी नहीं कहा जाता है। उन्हें केवल इस नई पुस्तकालय द्वारा बुलाया जाता है। नतीजतन, कंपाइलर उन्हें अनुकूलित करता है, और मैं असफलताओं को जोड़ता हूं। जब मैं इन कार्यों में एक डमी कॉल जोड़ता हूं, तो लिंकिंग विफलताओं गायब हो जाती है।

क्या इन कार्यों को संकलित करने के लिए जीसीसी को बताने का कोई तरीका है भले ही उन्हें बुलाया न जाए?

मैं एसएसई लिनक्स (x86-64_linux_2.6.5_ImageSLES9SP3-3) पर -O2 का उपयोग कर जीसीसी 4.2.2 के साथ संकलित कर रहा हूं।

+0

क्या आपने -O0 का उपयोग करने का प्रयास किया है? –

+0

@jcomeau: लेकिन अगर आप उन्हें अनुकूलित करना चाहते हैं तो क्या होगा? – Cascabel

+0

यदि यह अनुकूलन के बिना काम करता है, तो करने के लिए यह पता लगाना है कि कौन से विशिष्ट अनुकूलन बंद हो जाएं; संभवतः -नो-इनलाइन-छोटे-फ़ंक्शंस एक होंगे, लेकिन मैंने कभी भी गहराई से खोला नहीं है कि जीसीसी अपने जादू कैसे करता है –

उत्तर

2

एक उपयोगितावादी होने के नाते, मैं तो बस डाल:

// Hopefully not a name collision :-) 
void *xyzzy_plugh_zorkmid_3141592653589_2718281828459[] = { 
    &functionToForceIn, 
    &anotherFunction 
}; 

अपने स्रोत फ़ाइलों में से एक (या यहां तक ​​कि एक नया स्रोत फ़ाइल, forcedCompiledFunctions.c की तर्ज पर कुछ की फ़ाइल स्तर पर, इतना है कि यह स्पष्ट है इसके लिए क्या है)। ।

क्योंकि यह गैर स्थिर है, संकलक एक मौका है कि आप इसे कहीं और की जरूरत नहीं होगी लेने के लिए सक्षम नहीं होगा, तो में यह संकलन चाहिए

2

आपका प्रश्न कुछ विवरण का अभाव है लेकिन मैं इसे एक शॉट ... दे देंगे

जीसीसी आम तौर पर बहुत कम मामलों में काम करता है निकालता है:

  • अगर वे घ हैं eclared स्थिर
  • कुछ मामलों में (जैसे जब -fno लागू-inlines उपयोग करते हुए) अगर वे इनलाइन घोषणा की जाती है
  • किसी भी दूसरों मैं

याद किया मैं 'एनएम' उपयोग करने का सुझाव देखने के लिए प्रतीकों वास्तव में निर्यात किया जाता है परिणामी .o फाइलों में यह सत्यापित करने के लिए वास्तव में समस्या है, और फिर किसी भी भटक 'स्थिर' कीवर्ड के बारे में देखें। इस क्रम में जरूरी नहीं कि ...

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

Btw, -Wall या -Wunused-समारोह विकल्पों जीसीसी अप्रयुक्त काम करता है, जो तब हटाने के लिए प्रधानमंत्री लक्ष्य होगा जब अनुकूलन के बारे में चेतावनी देगा के साथ। के लिए

चेतावनी ध्यान दें: 'XXX' में परिभाषित किया गया है, लेकिन अपने संकलन लॉग में

इस्तेमाल नहीं किया।

+1

"कोई अन्य जिसे मैंने याद किया" - हंसी के साथ पैक्स स्नॉर्ट्स :-) – paxdiablo

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

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