.o
फ़ाइलें ऑब्जेक्ट्स हैं। वे कंपाइलर और लिंकर/लाइब्रेरियन में इनपुट का आउटपुट हैं।
.a
फ़ाइलें संग्रह हैं। वे वस्तुओं या स्थैतिक पुस्तकालयों के समूह हैं और लिंकर में भी इनपुट कर रहे हैं।
अतिरिक्त सामग्री
मैं आपके प्रश्न के "उदाहरण" भाग नोटिस नहीं किया था। आम तौर पर आप स्थिर पुस्तकालय उत्पन्न करने के लिए एक मेकफ़ाइल का उपयोग करेंगे।
AR = ar
CC = gcc
objects := hello.o world.o
libby.a: $(objects)
$(AR) rcu [email protected] $(objects)
%.o: %.c
$(CC) $(CFLAGS) -c $< -o [email protected]
यह hello.c
और world.c
वस्तुओं में संकलन और फिर उन्हें पुस्तकालय में संगृहीत कर लिया जाएगा। प्लेटफ़ॉर्म के आधार पर, आपको संग्रह पर सामग्री की तालिका जेनरेट करने के लिए ranlib
नामक उपयोगिता चलाने की भी आवश्यकता हो सकती है।
एक दिलचस्प पक्ष नोट: .a
फ़ाइलें तकनीकी रूप से संग्रह फ़ाइलें और लाइब्रेरी नहीं हैं। वे संपीड़न के बिना ज़िप फ़ाइलों के समान हैं हालांकि वे एक बहुत पुराने फ़ाइल प्रारूप का उपयोग करते हैं। उपयोगिताओं द्वारा उत्पन्न सामग्री की तालिका ranlib
है जो एक संग्रह को लाइब्रेरी संग्रह बनाता है। जावा संग्रह फ़ाइलें (.jar
) समान हैं कि वे ज़िप फ़ाइलें हैं जिनमें जावा संग्रहकर्ता द्वारा बनाई गई कुछ विशेष निर्देशिका संरचनाएं हैं।
स्रोत
2009-03-17 15:24:03
यह मेक के विषय पर है, लेकिन अभी मैं जोड़ना होगा सोचा, आप भी स्थानापन्न कर सकते हैं '$ (वस्तुओं)' नुस्खा लाइन पर ('$ इस पेज में खोज (एआर) आरसीयू $ @ $ (ऑब्जेक्ट्स) ')' libby.a' लक्ष्य के साथ क्रमशः पहले या सभी आवश्यक लक्ष्यों को संदर्भित करने के लिए '$ <'या' $^'के साथ लक्ष्य।इसका वही प्रभाव होगा, लेकिन '$ (ऑब्जेक्ट्स) को दो बार निर्दिष्ट करने की अनावश्यकता को हटा देता है, यदि परिवर्तनीय नाम या पूर्वापेक्षाएँ बदलती हैं, और कम कोड होने पर भी दो स्थानों में संदर्भ को अपडेट करने की आवश्यकता होती है। –
@ शममेलली - मैं आम तौर पर '$ ^' से बचता हूं क्योंकि यह एक जीएनयू विस्तार है और [बीएसडी मेक] में मौजूद नहीं है (https://www.freebsd.org/cgi/man.cgi?make (1)) या [POSIX मेक] में (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/make.html)। मुझे इससे कोई फर्क नहीं पड़ता क्योंकि अधिकांश लिनक्स डिस्ट्रोज़ जीएनयू आधारित हैं लेकिन बैश से डैश तक '/ bin/sh' का स्विच मुझे जीएनयू विशिष्ट एक्सटेंशन से बचने के लिए पर्याप्त था। –
जानना अच्छा है। धन्यवाद। –