-nostdlib
का उपयोग करने और crt1.o -lc -lgcc
को जोड़ने के अलावा, क्या जीसीसी को crtbegin[S].o
और crtend[S].o
से जोड़ने से रोकने का कोई आसान तरीका है? ये फ़ाइलें इतनी बड़ी नहीं हैं, लेकिन मैं छोटी बाइनरी बनाने के साथ खेल रहा हूं, और सी प्रोग्राम के लिए आवश्यक बेकार सी ++ समर्थन कोड को हटाना चाहता हूं। (संभवतः, जीसीसी उन्हें सी प्रोग्राम के लिए भी लिंक करता है यदि आप ग्लोबल ऑब्जेक्ट वैरिएबल के साथ सी ++ लाइब्रेरी का उपयोग कर रहे हैं। मैं हर किसी को इस बारे में बता दूंगा कि इसे सुरक्षित एक-बार प्रारंभिक कॉल कैसे बनाया जाना चाहिए, जहां वैश्विक वस्तु का संदर्भ दिया गया है बल्कि main
करने से पहले वैश्विक वस्तुओं को प्रारंभ करने से सी ++ मॉड्यूल ...)क्या gcc omit crtbegin.o/crtend.o बनाने का कोई आसान तरीका है?
मैं सी ++ समर्थन में इस तरह के और इस तरह के पर सशर्त फ़ाइलों को जोड़ने बनाने के लिए जीसीसी specs
फ़ाइल हैकिंग करने के लिए विरोध नहीं किया जाएगा, लेकिन मैं कर रहा हूँ यकीन नहीं है कि मैं यह कैसे करूंगा। शायद पहले से ही एक अच्छा तरीका है?
मेरा मानना है कि उन्हें '__attribute__ ((कन्स्ट्रक्टर))' (और 'विनाशक') कार्यों के लिए भी आवश्यक है। (और मैं एक सी ++ विशेषज्ञ से बहुत दूर हूं, लेकिन मुझे बताया गया है कि मानक के अनुरूप, वैश्विक रचनाकारों को 'मुख्य()' कहा जाता है।) – caf
@caf: मैं इस धारणा के तहत था कि सी ++ मानक निर्दिष्ट करता है कि रचनाकारों को प्रोग्राम आमंत्रण के बीच अनिर्दिष्ट समय पर कॉल किया जाता है और पहली बार ऑब्जेक्ट का उपयोग किया जाता है (और निश्चित रूप से अनिर्दिष्ट क्रम में, उन मामलों से अलग जहां एक ऑब्जेक्ट दूसरे संदर्भित करता है और इस प्रकार "पहली बार इसका उपयोग किया जाता है") । क्या आपके पास इसके विपरीत संदर्भ है? –
शायद एक "अंडा-चूसने वाला सिख", लेकिन क्या आपने वास्तविक लिंक चरण के लिए सीधे अपने सिस्टम लिंकर (शायद 'ld') पर संकलन करने और सीधे जाने के लिए 'gcc' का उपयोग करने का प्रयास किया है ताकि आपके लिंक पर अधिक नियंत्रण हो? –