webentwicklung-frage-antwort-db.com.de

Fügen Sie .dll zu Java.library.path im Eclipse/PyDev-Jython-Projekt hinzu

Ich versuche, eine kompilierte .jar-Java-Bibliothek in meinem PyDev-Jython-Projekt zu verwenden.

Ich habe die .jar erfolgreich zum PYTHONPATH hinzugefügt und konnte mit dem Programmieren der automatischen Vervollständigung beginnen.

Die Bibliothek erfordert auch eine .dll-Erweiterung, javaHeclib.dll, also habe ich sie dem Abschnitt External Libs meines Projekts hinzugefügt.

Ich kann die Bibliothek gut importieren, erhalte jedoch eine Fehlermeldung, wenn ich versuche, auf eine ihrer Funktionen zuzugreifen:

Java.lang.UnsatisfiedLinkError: Java.lang.UnsatisfiedLinkError: no javaHeclib in Java.library.path

Ich habe meiner Laufkonfiguration ein Argument VM hinzugefügt, ohne Erfolg:

-Djava.library.path="Y:/path/to/javaHeclib.dll;${env_var:PATH}"

Ich kann die Bibliothek von der Kommandozeile aus mit dem obigen Java.library.path ausführen.

Beim Experimentieren in der PyDev-Konsole habe ich festgestellt, dass ich die .dll-Erweiterung mit einem absoluten Pfad laden kann, jedoch nicht mit einem relativen Pfad:

>>> import Java.lang
>>> Java.lang.System.load('Y:/path/to/javaHeclib.dll')
>>> Java.lang.System.loadLibrary('javaHeclib')
Traceback (most recent call last):
  File "<console>", line 1, in ?
Java.lang.UnsatisfiedLinkError: Java.lang.UnsatisfiedLinkError: no javaHeclib in Java.library.path

Leider verwendet die Bibliothek oben den Aufruf System.loadLibrary und ich habe keinen Zugriff auf die Quelle.

Warum ist javaHeclib.dll nicht in meinem Java.library.path?

EDIT

Wenn Sie Java.library.path auf das Verzeichnis mit der DLL setzen, konnte ich es nicht mit System.loadLibrary laden.

-Djava.library.path="Y:/path/to/dll/;${env_var:PATH}"

(Das Verwenden von Schrägstrichen hat keinen Unterschied gemacht.) Ich habe auch versucht, die Standardeinstellungen VM in Eclipse.ini zu ändern, ohne Erfolg:

-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx384m
-Djava.library.path="Y:\path\to\dll\;${env_var:PATH}"
17
Robbie Rosati

Ich habe das funktioniert.

Für zukünftige Referenz:

Angenommen, die benötigte DLL befindet sich in Y:\path\to\dlls\lib\. Legen Sie dann das Arbeitsverzeichnis der Ausführungskonfiguration auf Y:\path\to\dlls\ fest, und setzen Sie Ihre VM - Argumente auf -Djava.library.path=lib.

Das ist es, es sollte jetzt funktionieren. Ich weiß nicht, warum das Definieren eines absoluten Pfads in Java.library.path zuvor nicht funktioniert hat, aber das Festlegen eines Arbeitsverzeichnisses scheint das getan zu haben. 

Vielleicht ist es etwas Besonderes für die spezifische Bibliothek, die ich verwende (oder dass Eclipse von einem anderen Laufwerk ausgeführt wird als die Bibliothek).

8
Robbie Rosati

Ich denke der bessere Weg ist:

  1. Erstellen Sie unter dem Projekt einen Ordner, z. B. dll.
  2. Kopieren Sie alle DLL-Dateien in diesen Ordner.
  3. Klicken Sie unter Projekt -> Eigenschaften -> Java-Erstellungspfad -> Quelle auf die Quellendetails, und erweitern Sie sie. 
  4. Sie sehen den Speicherort der systemeigenen Bibliothek. Klicken Sie auf /, um es zu markieren. 
  5. Klicken Sie dann rechts auf Bearbeiten, klicken Sie erneut auf Arbeitsbereich. Sie können den DLL-Ordner unter dem Projekt sehen. 
  6. Wählen Sie es aus und klicken Sie auf OK, OK. Sie sehen, dass die DLL am Speicherort der systemeigenen Bibliothek hinzugefügt wird.

Das ist es. Sie müssen nichts manuell in der Konfiguration ändern.

43
Wayne

Ich hatte ein ähnliches Problem, aber mit Ghost Script-DLL. Selbst wenn die Dateien im Arbeitsverzeichnis abgelegt wurden und die Anweisungen befolgt wurden, funktionierte das für mich nicht. Verweisen Sie auf das Tag Ghost4J. Java.lang.UnsatisfiedLinkError: Die Bibliothek 'gsdll64' konnte nicht geladen werden. Sie hat den Pfad -Djna.library.path verwendet.

0
Jeya Venkatesh