2010-06-04 10 views
10

--sysroot स्विच तब उपयोगी होता है जब आप नहीं चाहते कि मानक पथ में शीर्षलेख/पुस्तकालय आपके निर्माण को प्रभावित करते हैं।जीसीसी के --सिस्रोट स्विच के विकल्प?

--sysroot=dir: हेडर और पुस्तकालयों के लिए तार्किक रूट निर्देशिका के रूप में dir का प्रयोग करें। उदाहरण के लिए, यदि कंपाइलर सामान्य रूप से हेडर/usr/include में लाइब्रेरी /usr/lib में खोज करेगा, तो इसके बजाय यह dir/usr/include और dir/usr/lib की खोज करेगा। [ref]

एक ही बात, पर्यावरण चर का उपयोग के माध्यम से पूरा किया जा सकता है जीसीसी चश्मा फ़ाइल, या किसी अन्य तरीके कि कमांड लाइन स्विच की आवश्यकता नहीं है?

उत्तर

7

यदि आप पर्यावरण चर का उपयोग कर सकते हैं तो आप CFSGS को --sysroot जोड़ सकते हैं।

3

आप जीसीसी के आस-पास एक रैपर स्क्रिप्ट बना सकते हैं जो आपके इच्छित झंडे के साथ वास्तविक जीसीसी निष्पादित करता है। यह मेकफ़ाइल और कॉम्प्लेक्स के साथ काम करता है जो पर्यावरण चर के साथ गड़बड़ बनाता है। आपको केवल यह सुनिश्चित करना होगा कि आपकी जीसीसी स्क्रिप्ट वास्तविक जीसीसी बाइनरी की तुलना में पहले पैथ में है। स्क्रिप्ट ही सिर्फ दो लाइनों,

#!/bin/sh 
exec /usr/bin/gcc --sysroot=/your/sysroot "[email protected]" 

है और अगर $HOME/bin अपने पथ के शुरू में है, तो आप $HOME/bin में स्क्रिप्ट डाल सकते हैं, और यह किसी भी अन्य उपयोगकर्ताओं को प्रभावित नहीं करेगा।

आप एक configure स्क्रिप्ट कि स्पष्ट रूप से /usr/bin/ में gcc के लिए लग रहा है है, तो आप /usr/bin/gcc.bin को /usr/bin/gcc नाम बदलें, और अपनी स्क्रिप्ट /usr/bin/gcc नाम के लिए आवश्यकता हो सकती है। यह सभी उपयोगकर्ताओं को प्रभावित करेगा। आप क्या कर सकते हैं तो आप इस की जरूरत है, लेकिन यह भी उसे केवल उन्हीं उपयोगकर्ता या उपयोगकर्ताओं को प्रभावित करना चाहते हैं, का उपयोग

#!/bin/sh 
[ "$(id -un)" -eq "theuser" ] && exec /usr/bin/gcc.bin --sysroot=/your/sysroot "[email protected]" 
exec /usr/bin/gcc.bin "[email protected]" 

तो वेरिएंट, उदा एक ही योजना का उपयोग करके एक विशिष्ट सिसरूट सेट करने के लिए विशिष्ट उपयोगकर्ता खाते या समूह सदस्यता।

+0

यह एकमात्र समाधान है जब मैंने एक्सिस 2/सी को पार करने की कोशिश की। कुछ रहस्यमय कारणों से, एक्सिस 2/सी के मेकफ़ाइल ने साझा किए गए लिंक को लिंक करते समय "--sysroot" विकल्पों को बंद कर दिया है जिन्हें मैंने CFLAGS, LDFLAGS और LIBS पर्यावरण चर में रखा है। मैंने ./configure --disable- साझा विकल्प के साथ साझा अक्षम करने का भी प्रयास किया था, लेकिन लिंकर अंतिम लिंकिंग चरण के दौरान "डुप्लिकेट प्रतीक" बग की शिकायत करेगा। – RichardLiu

+0

@ रिचर्ड लियू: यदि आप AXIS2/C 1.6.0 के लिए 'उपयोग/autogen.sh' चलाते हैं, तो यह एक नया '-with-sysroot = DIR' कॉन्फ़िगरेशन विकल्प बढ़ता है। ऐसा लगता है कि यह केवल libtool के लिए पारित किया गया है, हालांकि। '--with-cflags-sysroot' कॉन्फ़िगरेशन विकल्प जोड़ना (प्रत्येक' config.ac' में लगभग 30 लाइनें) काम करने लगती हैं। क्या आप उस पैच को आजमा सकते हैं? पूरी परियोजना पुरानी प्रतीत होती है, क्योंकि यह पहली फ़ाइल पर विफल हो जाती है, यह मेरी dev मशीन पर संकलन ('उपयोग/src/platforms/unix/uuid_gen_unix.c') को संकलित करने का प्रयास करती है .. –

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