2009-04-24 6 views
15

से LD_LIBRARY_PATH सेट करें I मेकफ़ाइल से LD_LIBRARY_PATH env चर कैसे सेट करें?मेकफ़ाइल

मेरे पास कुछ स्रोत कोड है जो साझा लाइब्रेरी से लिंक करता है जो बदले में एक अलग साझा लाइब्रेरी (1 से अधिक) से लिंक होता है। एप्लिकेशन बनाने के लिए मेकफ़ाइल केवल पहली साझा लाइब्रेरी के बारे में जानता है।

यदि मैं इसे बनाना चाहता हूं, तो मुझे यह निर्दिष्ट करना होगा: #export LD_LIBRARY_PATH=/path/to/the/shared/libs (बैश के लिए) और यह ठीक काम करता है।

हालांकि, मैं इसे मेकफ़ाइल से ही करना चाहता हूं।

उत्तर

2

मैं जोड़ने की कोशिश की थी:

export LD_LIBRARY_PATH=/path/to/the/shared/libs 

जो जाहिरा तौर पर ठीक काम करता है।

मुझे त्रुटियां मिल रही थी क्योंकि मेरा/पथ/से/साझा/libs गलत था।

यह जानना अच्छा होगा कि अन्य लोग इसके लिए क्या करते हैं और/यदि कोई बेहतर तरीका है।

+1

क्या आप वाकई यह काम करते हैं? मेरी समझ यह थी कि यदि आप मेकफ़ाइल से ऐसा करते हैं, तो इस प्रक्रिया और बाल प्रक्रियाओं के लिए 'LD_LIBRARY_PATH' परिभाषित किया जाएगा, लेकिन उस खोल में नहीं जिसमें से आप' मेक 'चलाते हैं। – Gauthier

9

हां, "निर्यात" उपयोग करने का सही निर्देश है। इसे विस्तार से here में दस्तावेज किया गया है। यह वही तंत्र है क्योंकि उप-बनाता है चर को प्रसारित करने के लिए स्वयं ही उपयोग करता है। दोष यह है कि आप चुनिंदा रूप से चर को कुछ आदेशों तक नहीं पारित कर सकते हैं, न कि दूसरों के लिए।

दो अन्य विकल्प मैं के बारे में सोच सकते हैं: (कहीं एक लक्ष्य के रूप में निर्दिष्ट)

  • .EXPORT_ALL_VARIABLES का उपयोग करना, का कारण बनता है सभी चर उप आदेशों की पर्यावरण को निर्यात किया जाना है।
  • कमांड लाइन पर निर्दिष्ट करें:

    foo: 
        EXPORTEDVAR=somevalue gcc $< -o [email protected] 
    
7

आप (उदाहरण के लिए, क्योंकि आप पुनरावर्ती Makefiles जो सभी चर के लिए जोड़ है) makefile भीतर LD_LIBRARY_PATH चर निर्यात करने के लिए नहीं करना चाहते हैं, तो आप इसे अपने कंपाइलर और लिंकर को सभी कॉलों तक सीमित रख सकता है।

या तो आप इसे सीधे अपने लक्ष्य नियमों के भीतर सभी जीसीसी और एलडी कॉल में जोड़ते हैं, उदा।

my_target: my_target.o 
    LD_LIBRARY_PATH=/my/library/path gcc -o my_target my_target.o 

या आप वैश्विक मेकअप चर कि compilers परिभाषित सेट पथ, उदा .:

CC=LD_LIBRARY_PATH=/my/library/path gcc 
CPP=LD_LIBRARY_PATH=/my/library/path gcc 
CXX=LD_LIBRARY_PATH=/my/library/path gcc 

मैं संकलक के रूप में जीसीसी चुना है लेकिन निश्चित रूप से आप अपनी पसंद के किसी भी संकलक उपयोग कर सकते हैं शामिल हैं।

2

मैं एक ही समस्या थी, मैं LD_LIBRARY_PATH निर्यात करने के लिए किया था के रूप में आप ने क्या किया:

export LD_LIBRARY_PATH=/path/to/the/shared/libs ; my_command 

मेरे दोस्त ने मुझे एक विकल्प से पता चला जब LD_LIBRARY_PATH केवल एक ही आदेश पर लागू होता है, नीचे कोई अर्धविराम पर ध्यान दें।

LD_LIBRARY_PATH=/path/to/the/shared/libs my_command 

यह article और बताता है।

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

  • कोई संबंधित समस्या नहीं^_^