2012-05-04 10 views
7

मेरे पास कई .c फ़ाइलें और एक .a ऑब्जेक्ट फ़ाइल है। जीसीसी के साथ मुझे क्या कमांड का उपयोग एक एक्सई फाइल में संकलित करने के लिए करना चाहिए? अगर हम मेकफ़ाइल का उपयोग करते हैं, तो यह कैसा दिखता है?सी फाइलों को .a फ़ाइलों के साथ संकलित करने के लिए कमांड

उत्तर

1

.a फ़ाइल एक लाइब्रेरी है, जो पहले ही संकलित है। आप अपनी .c फ़ाइल को .o पर संकलित करते हैं, फिर आप निष्पादन योग्य बनाने के लिए .a के साथ अपने .o को लिंक करने के लिए लिंकर का उपयोग करते हैं। गैर तुच्छ परियोजनाओं के लिए

gcc -o maybe.exe useful.a something.c 

Makefiles आमतौर पर पहली जीसीसी आह्वान एक ओ वस्तु के लिए प्रत्येक ग फ़ाइल संकलित करने के लिए:

+3

* यह कैसे करें * के बारे में प्रश्न का उत्तर नहीं देता है। यह नहीं कहता "यह कैसा दिखता है"। – mtahmed

14

सरल मामलों के लिए आप शायद ऐसा कर सकते हैं।

gcc -c something.c 

तब वे लिंकर आह्वान एक आउटपुट निष्पादन में लिंक करने के लिए ओ और ए फ़ाइलों की एक सूची के साथ (इन दिनों अक्सर इसके लिए एक आवरण के रूप में जीसीसी का उपयोग)।

gcc -o maybe.exe useful.a something.o 

भी ध्यान रखें कि सबसे स्थापित पुस्तकालयों के लिए, यह ठेठ स्पष्ट .a फ़ाइल निर्दिष्ट नहीं करने के लिए, लेकिन इसके बजाय -lhandy कहने के लिए जो कम होगा "के लिए कॉन्फ़िगर में कुछ libhandy.a बुलाया खोजने की कोशिश के लिए (या है -एल) खोज निर्देशिका "

+0

ऑब्जेक्ट फ़ाइल पीढ़ी में त्रुटि को पकड़ने के लिए अज्ञात धन्यवाद –

4

*.a एक स्थिर पुस्तकालय और गतिशील नहीं (विंडोज़ में *.dll और लिनक्स में *.so)

gcc -L<here comes the library path> -l<library name> 
फ़ाइल के लिए उदाहरण के लिए

है के साथ निर्दिष्ट आप वर्तमान में libname.a है पथ का उपयोग करना चाहिए:

gcc *.c -L. -lname -o myprogram.o 
man से

(शेल कमांड प्रॉम्प्ट में आदमी जीसीसी डाल)

आप विकल्प और अन्य तर्कों मिश्रण कर सकते हैं। अधिकांश भाग के लिए, आप ऑर्डर का उपयोग करते हैं, इससे कोई फर्क नहीं पड़ता। ऑर्डर तब मायने रखता है जब आप एक ही तरह के कई विकल्प का उपयोग करते हैं; उदाहरण के लिए, यदि आप एक से अधिक बार निर्दिष्ट करते हैं, तो निर्देशिका निर्दिष्ट क्रम में खोज की जाती है। साथ ही, -l विकल्प के प्लेसमेंट महत्वपूर्ण है।

+0

बदल गया 'gcc -L <यहां लाइब्रेरी पथ> -l <लाइब्रेरी नाम> 'gcc -l से आता है <यहां लाइब्रेरी पथ> -l <लाइब्रेरी का नाम आता है > '। उम्मीद है कि आपका मतलब है –

+0

यदि पुस्तकालय 'libname.a' है तो आप '-lname' का उपयोग क्यों करते हैं? – this

+0

पढ़ें http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html – 0x90

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

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