2011-08-22 18 views
25

मैं जावा प्रोजेक्ट विकसित करने में हिस्सा लेता हूं, जो कुछ सी ++ घटकों का उपयोग करता है, इस प्रकार मुझे Jacob.dll की आवश्यकता होती है।एलडी_LIBRARY_PATH क्या है और इसका उपयोग कैसे करें?

(विंडोज 7 पर) मैं java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path बार आ रही है कोई फर्क नहीं पड़ता है जहाँ मैं Jacob.dll डाल ....

मैं संभव फैसलों और एक है कि मैं अब तक प्रयास नहीं किया है LD_LIBRARY_PATH चर सेट कर रहा है के लिए देखा , .dll फ़ाइल पर इशारा करते हुए।

मुझे थोड़ा अनुभव है और मैं इस चर के अर्थ और उपयोग के बारे में परिचित नहीं हूं - क्या आप मेरी मदद कर सकते हैं?

+0

गूगल देखना ... इस और डीएलएल की बात करने वाले किसी भी लिंक पर क्लिक करें ... – Nim

+1

और यहां मैंने पहले किया था: http://www.inonit.com/cygwin/jni/helloWorld/load.html – Nim

+0

यदि आप विंडोज़ का उपयोग कर रहे हैं और उस डीएलएल लोड होने की आवश्यकता है, "पाथ" सिस्टम वैरिएबल का उपयोग करें या विंडोज/सिस्टम 32 निर्देशिका में डीएल ड्रॉप करें। विंडोज़ में LD_LIBRARY_PATH का उपयोग नहीं किया जाता है। –

उत्तर

24

आमतौर पर आप JVM के कमांड लाइन पर java.library.path सेट करना होगा:

java -Djava.library.path=/path/to/my/dll -cp /my/classpath/goes/here MainClass 
+0

यह सही है! (+1) –

+0

mmm ... लेकिन ... LD_LIBRARY_PATH क्या है? – JPCF

33

LD_LIBRARY_PATH लिनक्स/यूनिक्स में पूर्वनिर्धारित पर्यावरणीय चर है जो गतिशील पुस्तकालयों/साझा पुस्तकालयों को जोड़ने के दौरान लिंकर को देखना चाहिए।

LD_LIBRARY_PATH में पथों की एक कोलन अलग सूची शामिल है और लिंकर मानक लाइब्रेरी पथ /lib और /usr/lib पर इन पथों को प्राथमिकता देता है। मानक पथ अभी भी खोजे जाएंगे, लेकिन LD_LIBRARY_PATH में पथों की सूची समाप्त होने के बाद ही समाप्त हो गया है।

LD_LIBRARY_PATH का उपयोग करने का सबसे अच्छा तरीका प्रोग्राम को निष्पादित करने से पहले इसे कमांड लाइन या स्क्रिप्ट पर सेट करना है। इस प्रकार आपके शेष सिस्टम से नया LD_LIBRARY_PATH अलग है।

उदाहरण उपयोग:

$ export LD_LIBRARY_PATH="/list/of/library/paths:/another/path" 
$ ./program 

के बाद से आप बात करते हैं के बारे में .dll आप एक विंडोज़ प्रणाली पर हैं और एक .dll एक रास्ता जो लिंक समय में लिंकर खोजें, खिड़कियों में इस पथ का है पर रखा जाना चाहिए पर्यावरण परिवर्तनीय PATH द्वारा सेट, तो .dll से PATH जोड़ें और इसे ठीक काम करना चाहिए।

7

एलडी_LIBRARY_PATH लिनक्स विशिष्ट है और यह एक पर्यावरण परिवर्तनीय निर्देशिका है जो डायनामिक लोडर को साझा पुस्तकालयों को देखना चाहिए।

निर्देशिका को जोड़ने का प्रयास करें जहां आपका .dll PATH चर में है। विंडोज स्वचालित रूप से इस पर्यावरण चर में निर्देशिका सूची में देखेंगे। LD_LIBRARY_PATH शायद समस्या का समाधान नहीं करेगा (जब तक कि JVM इसका उपयोग नहीं करता - मुझे इसके बारे में पता नहीं है)।

+0

धन्यवाद, जाहिर है यह मेरे लिए काम नहीं करेगा। अन्यथा आइटम को पीएटीएच वैरिएबल में जोड़ना कुछ ऐसा था जो मैंने पहले स्थान पर किया था ... अब तक कोई किस्मत नहीं है :) – karla

+0

मैं जावा डेवलपर नहीं हूं, लेकिन क्या आप java.library.path चर (सिस्टम के साथ) मुद्रित करने का प्रयास कर सकते हैं। getProperty())? वीएम शुरू करते समय आप इस चर को -D कमांड लाइन ध्वज के साथ सेट करने का प्रयास भी कर सकते हैं - रनटाइम पर भी इसे सेट कर सकते हैं। यदि आप एक्लिप्स इम्हो में काम कर रहे हैं तो परियोजना गुणों में बिल्ड पथ सेटिंग में "मूल पुस्तकालय स्थान" जैसे कुछ सेट करने का एक तरीका है। –

+2

लिनक्स नहीं !! सभी यूनिक्स इस पर्यावरण चर का उपयोग करते हैं! इसके अलावा यह जोड़ने के लिए नहीं है, लेकिन लोड करने के लिए! स्टेटिक लिंक्ड लाइब्रेरी आमतौर पर लिंकर को कमांड लाइन पर दी जाती हैं, गतिशील लोड किए गए लोगों को एलडी_LIBRARY_PATH के माध्यम से देखा जाता है। उदाहरण देखें http://linuxmafia.com/faq/Admin/ld-lib-path.html –

1

ठीक है, त्रुटि संदेश आपको बताता है कि क्या करना है: पथ जहाँ Jacob.dll java.library.path को रहता है जोड़ें। आप ऐसा कर सकते हैं इस तरह कमांड लाइन पर: "java.library.path":

java -Djava.library.path="dlls" ... 

(यह मानते हुए Jacob.dll "DLLs" में है फ़ोल्डर)

इसके अलावा java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

+3

JVM स्टार्टअप के बाद आप इस तरह से 'java.library.path' सेट नहीं कर सकते हैं। –

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

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