8 Stimmen

Wie konfiguriert man eine .dll-Datei in Java?

Ich verwende Jakob jar-Datei in meiner Java-Anwendung.

Diese Jacob jar Datei kommt mit einer .dll Datei. Ich habe die Jacob jar-Datei zu meinem Klassenpfad hinzugefügt. Aber wenn ich meine Anwendung ausführe, tritt ein Laufzeitfehler auf als

"couldn't load jacob-1.15-M3-x86.dll file"

Wie kann ich diese .dll-Datei laden?

Edited:=================================================================================

Ich hatte die Umgebungsvariable "path" auf das Verzeichnis gesetzt, das meine .dll-Datei enthält, und diese .dll-Datei wie folgt geladen

static {
    System.loadLibrary("jacob-1.15-M3-x86.dll");
}

aber der folgende Fehler ist aufgetreten

    java.lang.UnsatisfiedLinkError: no jacob-1.15-M3-x86.dll in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at TemplateClass.TemplateClass.<clinit>(TemplateClass.java:14)

10voto

Chris Dail Punkte 24971

Die 'jacob-1.15-M3-x86.dll' muss sich an einem Ort befinden, an dem das Betriebssystem sie finden kann. Hier haben Sie einige Möglichkeiten:

  • Sie können die .dll-Datei in dem Verzeichnis ablegen, aus dem Sie Ihre Anwendung gestartet haben. Wenn Sie ein Batch-Skript haben, um Ihre Anwendung zu starten, wäre es dieses Verzeichnis. Wenn Sie in einer Art Anwendungsserver starten, ist dies normalerweise das Verzeichnis "bin".

  • Sie können die .dll-Datei irgendwo in der Umgebungsvariablen %PATH% ablegen. Möglicherweise ist es einfacher, die Umgebungsvariable PATH zu aktualisieren, um das Verzeichnis mit der .dll-Datei aufzunehmen.

  • Eine andere Möglichkeit besteht darin, Ihre .dll im Verzeichnis %SystemRoot% zu speichern. \system32 Verzeichnis. Normalerweise ist dies ' C:\Windows\system32 '. Diese Option wird normalerweise nicht empfohlen, es sei denn, es handelt sich um eine gemeinsam genutzte Bibliothek wie die MSCVRT-Laufzeitumgebung.

Ein anderes mögliches Problem, das Sie haben könnten. Wenn die .dll als 32-Bit kompiliert ist, müssen Sie in der 32-Bit-Java-Laufzeitumgebung ausgeführt werden. Wenn es sich um eine 64-Bit-.dll handelt, muss sie in einer 64-Bit-JRE ausgeführt werden.

5voto

Carl Smotricz Punkte 64366

Ah, das ist kein Kompilierungsfehler, sondern ein Laufzeitfehler.

Meine Vermutung wäre, dass Ihre DLL auf der PATH . Nicht CLASSPATH pero PATH denn dort sucht Windows nach DLLs. Versuchen Sie entweder, Ihren PATH so zu erweitern, dass er den Speicherort Ihrer DLL enthält, oder tun Sie, was viele andere Leute tun: Verschieben Sie die DLL in \Winnt\System\System32 oder wie auch immer das Systemverzeichnis auf Ihrem Rechner heißt. Wo auch immer alle anderen DLLs sind, mit anderen Worten.

更新情報

Die von Ihnen gepostete Fehlermeldung weist glücklicherweise genau auf das Problem hin. Sie können es lösen, indem Sie das Verzeichnis mit Ihrer DLL in java.library.path Dieser Thread im Sun-Forum zeigt ein schönes Beispiel: http://forums.sun.com/thread.jspa?threadID=627890

Eigentlich ist das viel unsauberer als es sein sollte; dies scheint einer der "schattigeren" Bereiche in Java zu sein. Der Thread schweift stark ab, ich empfehle Ihnen, ihn ganz durchzulesen, um einige Probleme und Lösungen zu sehen. Ich denke, dass Sie mit ein wenig Versuch und Irrtum zum Erfolg kommen können.

3voto

barjak Punkte 10134

Andere Optionen:

  • setzen Sie die Eigenschaft java.library.path auf das Verzeichnis, das die DLL enthält. Beispiel: java -Djava.library.path="path/to/directory/containing/the/dll" -jar appli.jar
  • im Code, laden Sie die DLL explizit, mit System.load.

1voto

duffymo Punkte 298898

Sie müssen LD_LIBRARY_PATH setzen. Diese wird Ihnen die richtigen Schritte vorgeben, die Sie befolgen müssen.

1voto

Andrew Landsverk Punkte 665

Wenn Sie System.loadLibrary() enthalten nicht die .dll am Ende .

Auch wenn Sie nicht die java.library.path auf den Ordner verweisen, der die DLL enthält, dann sollte sich die DLL in dem Verzeichnis befinden, aus dem Sie Ihre Java-Anwendung starten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X