2012-02-23 19 views
12

मै मैक ओएस एक्स 10.6 पर जीसीसी 4.6.2 का उपयोग कर रहा हूं। जब मैं संकलित करता हूं तो मैं -static-libgcc विकल्प का उपयोग करता हूं, अन्यथा मेरी बाइनरी सिस्टम पर libgcc की तलाश करती है और मुझे यकीन नहीं है कि जीसीसी 4.2 पर कुछ भी ओएस एक्स पर समर्थित है। यह ठीक काम करता है, लेकिन मुझे libgcc की आवश्यकता क्यों है? मैंने इसे पढ़ा और जीएनयू दस्तावेज़ों में कहा गया है कि इसमें "अंकगणितीय संचालन शामिल हैं जो लक्ष्य प्रोसेसर सीधे प्रदर्शन नहीं कर सकता है।" मुझे कैसे पता चलेगा कि ये ऑपरेशन क्या हैं? और वे इतने जटिल क्यों हैं कि मुझे इस पुस्तकालय को शामिल करने की आवश्यकता है? जीबीसी इन पुस्तकालय कार्यों का सहारा लेने के बजाय सीधे कोड को अनुकूलित क्यों नहीं कर सकता? मैं थोड़ा उलझन में हूँ। इसमें कोई अंतर्दृष्टि की सराहना की जाएगी!क्या मुझे वास्तव में libgcc की आवश्यकता है?

+0

यूनिक्स पर संभव: http://unix.stackexchange.com/questions/1812/what-does-libgcc-s-so-contain –

उत्तर

16

हां, आपको इसकी आवश्यकता है .... शायद। यदि आपको इसकी आवश्यकता नहीं है तो स्थिर रूप से इसे जोड़ने से हानिरहित है। -t लिंक ट्रेस विकल्प (मुझे लगता है) का उपयोग करके आप यह बता सकते हैं कि आपको इसकी आवश्यकता है या नहीं।

ऐसी कई चीजें हैं जिन्हें आप एक निर्देश में नहीं कर सकते हैं (आमतौर पर 32-बिट आर्किटेक्चर पर 64-बिट ऑपरेशंस जैसी चीजें)। इन चीजों को किया जा सकता है, लेकिन यदि वे एक गैर-मामूली संख्या के निर्देशों का उपयोग करते हैं तो यह उन्हें एक ही स्थान पर रखने के लिए और अधिक जगह-कुशल है।

जब आप -O0 (वास्तव में डिफ़ॉल्ट रूप से डिफ़ॉल्ट रूप से) का उपयोग करके ऑप्टिमाइज़ेशन अक्षम करते हैं तो जीसीसी काफी हमेशा libgcc routines का उपयोग करता है।

जब आप गति अनुकूलन सक्षम करते हैं तो जीसीसी निर्देश अनुक्रम सीधे कोड में डालने का विकल्प चुन सकता है (यदि यह जानता है)। आप पाते हैं कि यह libgcc संस्करणों में से किसी का उपयोग करके समाप्त होता है - यह निश्चित रूप से कम libgcc कॉल का उपयोग करेगा।

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

असल में, आप इसे memcpy या गणित-लाइब्रेरी फ़ंक्शंस के समान सोच सकते हैं: संकलक इनलाइन कार्यों को लाभकारी साबित करता है, और लाइब्रेरी फ़ंक्शन को अन्यथा कॉल करता है। संकलक लाइब्रेरी परिभाषा को देखे बिना मानक कार्यों और libgcc फ़ंक्शन को "इनलाइन" कर सकते हैं - बेशक - यह सिर्फ "जानता है" वे क्या करते हैं।

स्थिर या गतिशील libgcc का उपयोग करना चाहे एक दिलचस्प व्यापार-बंद है। एक तरफ, एक गतिशील (साझा) लाइब्रेरी आपके पूरे सिस्टम में कम मेमोरी का उपयोग करेगी, और कैश किए जाने की अधिक संभावना है, दूसरी तरफ, एक स्थिर libgcc में कम कॉल ओवरहेड होता है।

सबसे महत्वपूर्ण बात हालांकि संगतता है। स्पष्ट रूप से libgcc लाइब्रेरी को आपके प्रोग्राम चलाने के लिए उपस्थित होना चाहिए, लेकिन इसे एक संगत संस्करण होना चाहिए। आप स्थिर जीसीसी संस्करण के साथ एक लिनक्स डिस्ट्रो पर ठीक हैं, लेकिन अन्यथा स्थिर लिंकिंग सुरक्षित है।

मुझे आशा है कि आपके प्रश्नों का उत्तर दें।

+0

हाँ! सुपर सहायक धन्यवाद! – Synthetix

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

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