2011-01-07 13 views
12

मुझे पता है -Wl,-sharedएलडी का विकल्प है। मैंने देखा है कुछ व्यक्ति इस तरह संकलन,-श्रेड और -ब्लूएल के बीच अंतर, जीसीसी विकल्पों के शेयर

$ gcc -shared -Wl,-soname,libtest.so -o libtest.so *.o 

और यह

$ gcc -Wl,-shared -Wl,-soname,libtest.so -o libtest.so *.o 

जैसे कुछ व्यक्ति तो, मैं अगर वहाँ -shared और -Wl,-shared के बीच कुछ अंतर नहीं है जानना चाहते हैं।

धन्यवाद।

उत्तर

11

वहाँ -shared गुजर जीसीसी या ld को -shared (-Wl के माध्यम से) के बीच एक अंतर है। जीसीसी में -shared पास करने से लिंक समय पर अन्य झंडे सक्षम या अक्षम हो सकते हैं। विशेष रूप से, अलग crt* फ़ाइलें शामिल हो सकती हैं।

अधिक जानकारी प्राप्त करने के लिए, जीसीसी की gcc/config/ निर्देशिका और उपनिर्देशिका में -shared के लिए grep।

संपादित करें: एक विशिष्ट उदाहरण देने के लिए: i386 FreeBSD पर, gcc -shared जबकि -shared बिना, यह बजाय crtend.o में लिंक करेगा, वस्तु फ़ाइल crtendS.o में लिंक करेगा। इस प्रकार, -shared और -Wl,-shared समकक्ष नहीं हैं।

+1

वर्तमान जीसीसी के एसवीएन ट्रंक में, मुझे gcc/config/i386/linux.h में लाइन 85 पर निम्न टिप्पणियां मिलीं। "लिनक्स के लिए एक LINK_SPEC उपयुक्त प्रदान करें। यहां हम विशेष जीसीसी विकल्पों के लिए समर्थन प्रदान करते हैं- स्टेटिक और शेर, जो हमें लिंक-टाइम पर विकल्पों के उचित संयोजनों को लागू करके इन तीन तरीकों में से किसी एक में चीजों को जोड़ने की अनुमति देता है।" –

+0

हाय, एफएक्स, क्या आप एक और ठोस स्पष्टीकरण दे सकते हैं? धन्यवाद। –

0

मुझे नहीं लगता कि कोई अंतर है। -sharedgcc का एक समर्थित विकल्प नहीं है और यह लिंकर को पास किया गया है चाहे आप इसे -Wl के साथ निर्दिष्ट करते हैं या नहीं। -Wl जीसीसी का विकल्प यह निर्दिष्ट करने के लिए प्रयोग किया जाता है कि विकल्पों की अल्पविराम से अलग सूची को आगे संसाधित करने के लिए लिंकर को पास किया जाना है।

+0

एक अंतर है। मेरे मामले में, परियोजना -ब्लूएल के साथ संकलित नहीं होगी। –

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