2011-12-15 11 views
21

आप एक सरल सी कार्यक्रम है, की तरहमैन्युअल जीसीसी के चरणों चल रहा है, संकलन, कोडांतरण, जोड़ने

int main(void) {return 0;} 

यह gcc -o test test.c साथ संकलित किया जा सकता।

जैसा कि मैं समझता हूं, जीसीसी संकलन करता है, फिर लिंकिंग को जोड़ता है। बाद के दो चरणों को as और ld चलाकर हासिल किया जाता है।

मैं gcc -S test.c का उपयोग करके असेंबली कोड उत्पन्न कर सकता हूं।

असेंबली कोड को निष्पादन योग्य में बदलने के लिए आप टर्मिनल में क्या टाइप करेंगे?

+2

वास्तव में यह पहले पूर्व प्रसंस्करण करता है, तो संकलन, तो कोडांतरण, और फिर जोड़ने। प्रसंस्करण शायद प्रक्रिया का एक अनिवार्य हिस्सा है, खासकर यदि आप बूस्ट का उपयोग करते हैं ... –

+2

आप यह देखने के लिए '-v' पैरामीटर का उपयोग कर सकते हैं कि जीसीसी अपने उपप्रोग्राम को कैसे कॉल करता है, उदा। 'gcc -o test test.c -v' – mizo

उत्तर

39

ये जीसीसी

gcc -E --> Preprocessor, but don't compile 
gcc -S --> Compile but don't assemble 
gcc -c --> assemble but don't link 
gcc with no switch will link your object files and generate the executable 
+2

जीसीसी के मौजूदा संस्करणों में अब एक अलग प्रीप्रोसेसर नहीं है (हालांकि आप उपर्युक्त के रूप में केवल प्रीप्रोसेसिंग के लिए पूछ सकते हैं) – vonbrand

+0

अच्छा जवाब, बहुत बुरा यह बहुत अधिक व्याख्या नहीं करता है – CristiFati

1

आप, gcc -S -o test.s test.c करने के बाद प्रकार gcc -o test test.s (ऐसा करने के लिए कारण विधानसभा जानने के लिए है)।

3

gcc test.s -o test आपके लिए test.s से test संकलित करेगा।

NASM आपके समय के लायक भी हो सकता है - असेंबली संकलित करने के लिए gcc से यह आसान/अधिक अनुकूल हो सकता है।

+0

वास्तव में नहीं। 'gcc' आपके प्रोजेक्ट के अन्य टुकड़ों को कैसे प्रबंधित करता है, इसकी पूरी संगतता में, आपके लिए बहुत से सिस्टम निर्भर नौकरशाही को संभालता है। – vonbrand

0

आपके पास gcc हो सकता है जहां भी आप चाहते हैं संकलन प्रक्रिया शुरू करें और रोकें। gcc test.s -o test असेंबली से test.s को निष्पादन योग्य में संकलित करेगा।

0

का उपयोग कर आप कर सकते हैं या पता नहीं हो सकता के रूप में विभिन्न चरणों में हैं, संकलन के चार चरणों preprocess (ई), विधानसभा (एस) के संकलन वस्तु को इकट्ठा करने के लिए कर रहे हैं कोड (-सी), और अंत में लिंक। मेरे लिए यह पता लगाने के लिए सबसे कठिन था कि प्रीप्रोसेसर आउटपुट का उपयोग कैसे करें। यहां इसका तरीका बताया गया है:

gcc -E hello.c | gcc -S -xc -o hello.s - 
gcc -c hello.s -o hello.o 
gcc hello.o -o hello 
संबंधित मुद्दे