-nostdlib
के साथ संकलन/लिंकिंग स्थिर प्रारंभिकता को रोकने के लिए प्रतीत होता है, भले ही मैं अपना खुद का crti.s और crtn.s .init
/.fini
अनुभागों के साथ जोड़ूं।जी ++, स्थैतिक प्रारंभिकरण और -nostdlib
क्या जी ++ स्थिर प्रारंभिक कोड उत्पन्न करने के लिए कामकाज है जो .init
में डाला गया है या मैं मैन्युअल रूप से कॉल कर सकता हूं?
यह है कि मैं क्या करने की कोशिश की है:
g++ -o test.o -c -fno-use-cxa-atexit test.cc # has _start (entry point)
# that calls _init and _main
as -o crti.o crti.s # has _init in section .init
as -o crtn.o crtn.s
g++ -o test ./crti.o test.o -nodefaultlibs -nostartfiles ./crtn.o
-nodefaultlibs
अकेले स्थिर प्रवर्तन कोड भी शामिल है और कहते हैं, लेकिन libc-_start/_init की ताकतों उपयोग।
-nodefaultlibs -nostartfiles
मुझे अपने स्वयं के _start/_init का उपयोग करने की अनुमति देता है, लेकिन इसमें स्थिर प्रारंभिक कोड या कोड शामिल नहीं है।
प्रयास करें इस 'जी ++ -ओ परीक्षण ./crti.o ./crtn.o test.o -Wl, -nostartfiles' और अपने उपयोग को देख -nodefaultlibs मैं आपको लगता है केवल अपनी स्टार्टअप फ़ाइलों को शामिल करना चाहते हैं और आप मानक पुस्तकालय से अन्य libs के साथ ठीक लग रहे हैं? –
@ पवन: मैंने '-Wl, -nodefaultlibs -Wl, -nostartfiles' की कोशिश की, लेकिन फिर libc-_init संकलक द्वारा शामिल किया गया है। उपयोग आईबीएम सेल एसपीयू के लिए है - मुझे सब कुछ सेट अप करने के लिए अपना खुद का स्टार्टअप कोड चाहिए और libc फ़ंक्शंस का उपयोग न करें, लेकिन अभी भी कॉल करने के लिए स्थिर रचनाकारों की आवश्यकता है। – Thomas
मुझे सी ++ में अच्छी तरह से पता नहीं है, इसलिए मुझे इसका मतलब नहीं मिल रहा है "लेकिन अभी भी स्थिर रचनाकारों को बुलाए जाने की आवश्यकता है"? क्या आप मुझे कुछ उदाहरण बता सकते हैं। मैं हर समय स्थिर libs सोच रहा था –