2013-04-05 4 views
14

काम नहीं कर रहा है मैं कुछ पर्यावरण चर सेट करने के तरीके को समझने की कोशिश कर रहा हूं जो पुस्तकालयों के सही संस्करणों से लिंक करने के लिए g ++ बना देगा।जीसीसी डिफ़ॉल्ट रूप से डिफ़ॉल्ट लिंकर खोज पथ से पहले कैसे जोड़ना है? LIBRARY_PATH

मेरे पास/usr/lib64 में कुछ पुराने बूस्ट लाइब्रेरी हैं (इनके खिलाफ लिंक विफल हो जाएगा) और/v/users/regel/lib में नए पुस्तकालय हैं। तो लिंकर को नए पुस्तकालयों के खिलाफ लिंक करना चाहिए।

कमान:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib 

लिंक कार्यक्रम सही ढंग से। हालांकि, मैं इसे लिंकर के लिए नंबर 1 खोज निर्देशिका के रूप में सेट करना चाहता हूं ताकि जब भी मैं लिंक करता हूं तो मुझे '-L' निर्दिष्ट करने की आवश्यकता नहीं है।

निम्नलिखित वातावरण चर चाल करने के लिए नहीं है:

$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system 
/tmp/regel/cc4SmBtI.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

और

$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system 
/tmp/regel/ccUreBZy.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

समान विषयों पर अनेक लेख और पोस्ट पढ़ के बावजूद, मैं एक समाधान अभी तक नहीं मिली है।

+0

क्या आपने g ++ चलाने से पहले LD_LIBRARY_PATH को निर्यात करने की कोशिश की है (इसे g ++ कमांड लाइन पर प्रदान करने के बजाय)? –

+0

मैंने g ++ चलाने से पहले LIBRARY_PATH और LD_LIBRARY_PATH दोनों को निर्यात करने का प्रयास किया है। – Regel

+0

@ फ्रैंकस्चिमट, इसे जिस तरह से ओपी के निर्यात के समान प्रभाव पड़ा है, लेकिन उस कमांड और उसके बच्चों तक सीमित है) ताकि –

उत्तर

6

जीसीसी मैनुअल says, LIBRARY_PATH लाइब्रेरी खोज पथ में निर्देशिका जोड़ने के लिए सही पर्यावरण चर है।

आप g++ आदेश को -v जोड़ देते हैं तो आप LIBRARY_PATH यह का उपयोग करता है देखना चाहिए, और आप इसे निर्देशिका आपके द्वारा निर्दिष्ट शामिल है, और है कि यह -L रूप collect2 आदेश पर जुड़ जाता है देखना चाहिए, लेकिन आप इसे देखेंगे मानक निर्देशिका ऐसे -L/usr/lib आदि

के रूप में मैं LIBRARY_PATH में निर्देशिका पहले आओ बनाने के लिए किसी भी तरह से पता नहीं है के बाद जुड़ जाता है, मुझे लगता है कि आपको लगता है कि के लिए -L उपयोग करना होगा।

+2

यह स्वीकार्य उत्तर क्यों था?यह सवाल का जवाब नहीं देता है। –

-1

/etc/ld.so.conf.d/

लिंकर /etc/ld.so.conf.d/ में फ़ाइलों में निर्दिष्ट पथ पर लग रहा है में एक .conf फ़ाइल में पुस्तकालय पथ निर्दिष्ट करने का प्रयास लिंक करते समय।

सुनिश्चित करें कि आप फ़ाइल बनाते समय 'ldconfig' चलाएं, जो इसे अपने कैश को अपडेट करने के लिए मजबूर करेगा।

+5

मुझे विश्वास है कि आप लोडर (ld.so) के बारे में बात कर रहे हैं और लिंकर (एलडी) नहीं। –

+0

यह उत्तर इतना "छोटा" क्यों है? जब मैं जीसीसी बाइनरी पर स्ट्रेस कर रहा हूं, तो मैं /etc/ld.so.conf फ़ाइल पढ़ सकता हूं (जिसमें आमतौर पर ld.so.conf.d/* conf शामिल है)। – Kuchara

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