2009-03-02 11 views
9

Solaris पर अनुप्रयोग विशिष्ट LD_LIBRARY_PATH चर सेट अप करने के लिए सबसे अच्छी जगह क्या है? कैसेSolaris पर LD_LIBRARY_PATH सेट करने के लिए कहां?

LD_LIBRARY_PATH

चर काम करता है?

हम वर्तमान में यह .kshrc में स्थापित है, लेकिन विभिन्न अनुप्रयोगों मैसेजिंग ढांचे के विभिन्न संस्करणों की जरूरत है, लेकिन इन आवेदनों में एक ही उपयोग के तहत चलाने के लिए और इसलिए वे अलग LD_LIBRARY_PATH की आवश्यकता होगी, तो आपकी राय में इस सेट करने के लिए सबसे अच्छी जगह है क्या चर?

मूल रूप से मैं यह पता लगाने कैसे उपयोगकर्ता वातावरण विशिष्ट के बजाय आवेदन के इस चर पथ हिस्सा बनाने के लिए कोशिश कर रहा हूँ।

उत्तर

14

आमतौर पर मैं सिर्फ एक खोल स्क्रिप्ट है कि आवेदन शुरू होता है के लिए होगा। शेल स्क्रिप्ट में मैं उस ऐप के लिए जो कुछ भी चाहता हूं उसे LD_LIBRARY_PATH सेट कर दूंगा, फिर स्क्रिप्ट उस ऐप को शुरू करेगी। ऐसा करने से पथ को केवल उस एप्लिकेशन के लिए सेट किया जाना चाहिए।

+0

पर लिंकर + लाइब्रेरीज़ मार्गदर्शिका में भी दस्तावेज किया गया है, धन्यवाद, मैं जिन लाइनों के बारे में सोच रहा था, उनके साथ धन्यवाद। हालांकि क्या यह वैरिएबल बाहरी ऐप_प्रोफाइल फ़ाइल में उस चर को रखने और फिर उस स्क्रिप्ट में फ़ाइल को स्रोत करने का अर्थ होगा? या आप इसके साथ कोई समस्या देखते हैं? मैं सोच रहा हूं क्योंकि एकाधिक ऐप्स को उसी पथ की आवश्यकता होती है जो इसे बाहरी बनाने के लिए समझ में आ सकती है? –

+0

एलडी_LIBRARY_PATH (या LD_LIBRARY_PATH_32 और LD_LIBRARY_PATH_64) निष्पादन योग्य लॉन्च होने से पहले सेट करने की आवश्यकता है - क्योंकि ld.so.1 आपको मुख्य() प्राप्त करने से पहले इसे पढ़ता है और बाद में इसे फिर से नहीं पढ़ता है। –

+0

@ विले - मुझे लगता है कि यह काम करेगा, लेकिन आप यह सुनिश्चित करने के लिए पहले प्रयास करना चाहेंगे कि –

6

आप एक औपचारिक "ld.so.1", यानी रन "आदमी ld.so.1" के लिए आदमी पृष्ठ पर LD_LIBRARY_PATH का विवरण मिल सकता है। यह कुछ अन्य चरों का भी वर्णन करता है जिन्हें रनटाइम लिंकर द्वारा सम्मानित किया जाता है।

LD_LIBRARY_PATH, निष्पादनयोग्य और साझा पुस्तकालयों के अलावा भी एक अंतर्निहित खोज पुस्तकालयों के लिए पथ हो सकता है। यदि आप एक एप्लिकेशन चला रहे हैं जिसे आपने स्वयं लिंक किया है, तो आप अंतर्निहित पथ सेट करने के लिए ld's -R विकल्प का उपयोग कर सकते हैं (सूर्य सीसी और जीसीसी दोनों में एक ही काम करने के विकल्प हैं)। यह आपको पहले स्थान पर LD_LIBRARY_PATH का उपयोग करने से बचने की अनुमति दे सकता है।

crle -l/path// अपने/lib/फ़ाइल

-1

आप crle आदेश का उपयोग कर सकते हैं। सोलारिस पर, LD_LIBRARY_PATH का उपयोग नहीं किया जाना चाहिए। इसके बजाय क्रेल का प्रयोग करें। वर्तमान पथ देखने के लिए, बस अपने आप "क्रेल" चलाएं। सूची को अद्यतन करने के लिए, crle -u -l /path/to/your/lib/directory का उपयोग करें। सिस्टम कॉन्फ़िगरेशन में परिवर्तन लिखने के लिए -u की आवश्यकता है, अन्यथा परिवर्तन अस्थायी होगा। अधिक विकल्पों के लिए मैन पेज देखें।

+1

क्रेल एक ही समस्या से ग्रस्त है जो इसे वैश्विक पर्यावरण फ़ाइल में स्थापित करता है - यह सभी अनुप्रयोगों को प्रभावित करता है, इसलिए विभिन्न अनुप्रयोगों को पुस्तकालयों के विभिन्न संस्करणों की आवश्यकता होने पर सहायता नहीं होती है। – alanc

+0

एलएएन सही है। –

+1

@alanc * गलत * है। 'crle -c' आपको विशिष्ट अनुप्रयोगों को प्रभावित करने की अनुमति देगा (http://docs.oracle.com/cd/E19082-01/819-2239/crle-1/index.html पर उदाहरण 6 देखें) – vladr

1

crle प्रतिक्रिया सबसे सही है करने के लिए:

+2

जैसा कि पिछले क्रेल उत्तर पर टिप्पणियों में उल्लेख किया गया है, यह सबसे अच्छा समाधान नहीं है, क्योंकि यह * सभी * कार्यक्रमों को प्रभावित करता है, न केवल टूटे हुए लोगों को, जिनके साथ वे अलग-अलग पथ की आवश्यकता होती है। केवल उन अनुप्रयोगों के लिए LD_LIBRARY_PATH सेट करने के लिए एक खोल स्क्रिप्ट रैपर सभी प्रोग्रामों में परिवर्तनों को जोखिम देने से अधिक सुरक्षित और सुरक्षित है, और असंगत पथों की आवश्यकता वाले विभिन्न अनुप्रयोगों से निपटने का एकमात्र तरीका है। – alanc

+2

@alanc, गलत; आप प्रति-अनुप्रयोग वातावरण को परिभाषित करने के लिए 'crle -c' का उपयोग कर सकते हैं, एक ला विंडोज प्रकट होता है (http://docs.oracle.com/cd/E19082-01/819-2239/crle-1/index पर उदाहरण 6 देखें। एचटीएमएल)। – vladr

0

बस एक मामला मिला कि वैश्विक LD_LIBRARY_PATH प्रभावी नहीं होता है, मुझे एक स्क्रिप्ट लपेटनी थी और ऐप से पहले LD_LIBRARY_PATH सेट करना था। क्रेल एक अच्छा वैश्विक समाधान है यदि आपने ब्लैकवेव से pkgutil के माध्यम से/opt/csw/lib के तहत बहुत सी libs इंस्टॉल की हैं।

0

आप अपनी .profile या .profile.user फ़ाइल देख सकते हैं। इसके लिए एक टिप्पणी प्रविष्टि होगी। इसे तोड़ने के बाद उपयोग करने की अनुशंसा नहीं की जाती है। आपको उपयोग करने के बजाए झंडे के मूल्यों को पास करके बाइनरी बनाना चाहिए परिवर्तनीय

2

Vladr, alanc सही है।

Solaris पर LD_LIBRARY_PATH सेट करने की अनुशंसा नहीं की जाती है। बिलकुल।

यदि आपको अपनी लाइब्रेरी या निष्पादन योग्य, में एक विशिष्ट रनपैथ सेंकना है तो आपको लिंकर को -आर ध्वज का उपयोग करना चाहिए। यदि जीसीसी के साथ इमारत है, तो उपयोग -Wl, Rpath (मुझे लगता है)।

यदि आपको पोस्ट-बिल्ड चरण के लिए ऐसा करने की आवश्यकता है (उदाहरण के लिए, क्योंकि आपको स्रोत का पुन: संकलन करने की कमी है), तो elfedit (1) आपको बहुत मदद करेगा। यह मैनपेज में और http://docs.oracle.com/cd/E26502_01/html/E26507/index.html

+0

संगतता कारणों के लिए, सोलारिस पर जीसीसी भी 'आरआर' को समझता है। आप अभी भी '-Wl, -Rsomedir' का उपयोग कर सकते हैं क्योंकि यह तब लिनक्स के लिए पोर्टेबल है। या '-Wl, -rpath, somedir' का उपयोग करें जिसे समझा जाता है उदा। सोलारिस और लिनक्स पर रनटाइम लिंकर द्वारा। – maxschlepzig

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