2011-08-22 30 views
25

Prendo parte allo sviluppo di un progetto Java, che utilizza alcuni componenti C++, quindi ho bisogno di Jacob.dll. (Su Windows 7)Che cos'è LD_LIBRARY_PATH e come utilizzarlo?

Continuo a ricevere java.lang.UnsatisfiedLinkError: no JacobDB in java.library.path non importa dove ho messo Jacob.dll ....

Ho guardato per eventuali decisioni e quello che non ho provato finora è impostando la variabile LD_LIBRARY_PATH , indicando il file .dll.

Ho poca esperienza e non ho familiarità con quello che dovrebbe essere il significato e l'uso di tale variabile - potete aiutarmi?

+0

google: "java.library.path" ... fai clic su qualsiasi link che parla di questo e dll ... – Nim

+1

e eccone uno che ho fatto in precedenza: http://www.inonit.com/cygwin/jni/helloWorld/load.html – Nim

+0

Se stai usando windows e è necessario avere quella DLL caricata, utilizzare la variabile di sistema "PATH" o rilasciare la DLL nella directory Windows/System32. LD_LIBRARY_PATH non è utilizzato in Windows. –

risposta

24

In genere è necessario impostare java.library.path sulla riga di comando del JVM:

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

Questo corretto! (+1) –

+0

mmm ... ma ... che cos'è LD_LIBRARY_PATH? – JPCF

33

LD_LIBRARY_PATH è la variabile ambientale predefinita in Linux/Unix che imposta il percorso a cui il linker deve guardare mentre collega librerie dinamiche/librerie condivise.

LD_LIBRARY_PATH contiene un elenco separato da due punti di percorsi e il linker dà priorità a questi percorsi oltre i percorsi della libreria standard /lib e /usr/lib. I percorsi standard saranno ancora cercati, ma solo dopo che l'elenco dei percorsi in LD_LIBRARY_PATH è stato esaurito.

Il modo migliore per utilizzare LD_LIBRARY_PATH è impostarlo sulla riga di comando o sullo script immediatamente prima dell'esecuzione del programma. In questo modo il nuovo LD_LIBRARY_PATH isolato dal resto del tuo sistema.

Esempio di utilizzo:

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

Dal momento che si parla di .dll siete su un sistema Windows e un .dll devono essere collocati in un percorso che le ricerche del linker in fase di collegamento, in Windows questo percorso è impostato dalla variabile ambientale PATH, quindi aggiungere che .dll a PATH e dovrebbe funzionare correttamente.

7

LD_LIBRARY_PATH è specifico per Linux ed è una variabile di ambiente che punta alle directory in cui il caricatore dinamico deve cercare librerie condivise.

Provare ad aggiungere la directory in cui il file .dll si trova nella variabile PATH. Windows cercherà automaticamente l'elenco delle directory in questa variabile di ambiente. LD_LIBRARY_PATH probabilmente non risolverà il problema (a meno che la JVM non lo usi). Non lo so.

+0

Grazie, ovviamente non funzionerà per me. Altrimenti aggiungere l'elemento alla variabile PATH era qualcosa che ho fatto al primo posto ... senza fortuna finora :) – karla

+0

Non sono uno sviluppatore Java, ma potresti provare a stampare la variabile java.library.path (con System. getProperty())? Si potrebbe anche provare a impostare questa variabile con il flag della riga di comando -D all'avvio della VM - potrebbe anche essere impostato impostarla in fase di runtime. Se stai lavorando in Eclipse imho, c'è un modo per impostare qualcosa come "Ubicazioni di una biblioteca nativa" nell'impostazione Percorso di creazione nelle proprietà del progetto. –

+2

Non Linux !! Tutti gli Unix usano questa variabile d'ambiente! Inoltre non è per il collegamento, ma per il caricamento! Le librerie statiche collegate sono di solito fornite sulla riga di comando al linker, quelle dinamiche caricate vengono cercate su LD_LIBRARY_PATH. Vedi per es. http://linuxmafia.com/faq/Admin/ld-lib-path.html –

1

Bene, il messaggio di errore ti dice cosa fare: aggiungere il percorso in cui risiede Jacob.dll a java.library.path. Si può fare sulla riga di comando come questo:

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

(assumendo Jacob.dll è nella "DLL" cartella)

vedere anche java.lang.UnsatisfiedLinkError no *****.dll in java.library.path

+3

Dopo l'avvio di JVM non è possibile impostare 'java.library.path' in questo modo. –