2016-05-03 13 views
0

Ich versuche laden, zu verwenden:java.lang.UnsatisfiedLinkError: Kann Bibliothek (mit Visual Studio 2015 build)

  1. 32-Bit-DLL auf einem laufenden 32-Bit-JVM (mit Visual Studio 2015 gebaut) Anwendung auf einem Windows 7 64-Bit-Maschine

  2. 64-Bit-DLL (mit Visual Studio 2015) auf einer 64-Bit-JVM laufende Anwendung auf einem Windows 7 64-Bit-Maschine

Die DLL hat eine wenige zur Verfügung gestellt abhängen encies, aber ich habe 'jna.library.path' in dem Ordner eingerichtet, der alle erforderlichen Abhängigkeiten enthält, damit jna sie finden kann. Ich habe auch den Ordner, der die DLL und ihre Abhängigkeiten enthält, zu 'java.library.path' hinzugefügt, um sicherzustellen, dass sie gefunden werden.

In beiden Fällen leider bekomme ich die

java.lang.UnsatisfiedLinkError: Unable to load library.

Einige andere Punkte zu beachten:

  • Wenn ich meine Anwendung aus dem Verzeichnis mit den Bibliotheken starten, läuft es ohne Probleme . Bedeutet dies ein Problem mit dem DLL-Suchpfad zum Laden?

  • Ich erstellte zuvor die Bibliothek mit Visual Studio 2010, und ich konnte die Bibliotheken ohne ein Problem laden. Könnte dies ein Problem mit dem DLL-Build sein?

Irgendwelche Ideen zu was könnte das Problem sein?

Ich habe "jna.debug_load" und "jna.debug_load.jna" aktiviert und das Protokoll zeigt, dass der richtige Pfad versucht wird, aber der Ladevorgang immer noch fehlschlägt (ich habe überprüft und überprüft, dass in beiden Szenarien die richtige lib ist verfügbar unter C: \ Pfad \ zu \ my \ lib [32/64] \ xxx.dll). Das folgende Protokoll ist für das 32-Bit-DLL-Laden, aber genau das gleiche Ergebnis passiert mit dem 64-Bit-DLL.

...snip... 
Trying (via loadLibrary) jnidispatch 
Looking in classpath from ...[...] for x86/jnidispatch.dll 
Found library resource at bundleresource://449.fwk22856250/com/sun/jna/win32-x86/jnidispatch.dll 
Trying C:\...snip...\AppData\Local\Temp\jna--892366855\jna1523529206075569309.dll 
Found jnidispatch at C:\...snip...\AppData\Local\Temp\jna--892366855\jna1523529206075569309.dll 
Looking for library 'xxx' 
Adding paths from jna.library.path: C:/path/to/my/lib32 
Trying C:\path\to\my\lib32\xxx.dll 
Adding system paths: [] 
Trying C:\path\to\my\lib32\xxx.dll 
Looking for lib- prefix 
Trying libxxx.dll 
Looking in classpath from ...[...] 
... 
java.lang.UnsatisfiedLinkError: Unable to load library 'xxx': Native library (win32-x86/xxx.dll) not found in resource path... 
...snip... 
+0

* Bedeutet dies ein Problem mit dem DLL-Suchpfad zum Laden? * Ja. Fügen Sie diesen Ordner zu Ihrem ['java.library.path'] hinzu (http://stackoverflow.com/a/1734214/2970947). –

+0

Ich stimme eher mit Ihnen überein ... aber ich vermisste dieses Detail in der Beschreibung, der Ordner, der die DLL und die Abhängigkeiten enthielt, wurde an den Anfang von "jna.library.path" und "java.library.path" verkettet. Trotzdem funktioniert es nicht. Könnte ich etwas anderes verpassen? –

+0

Versuchen Sie diesen Ordner zu Ihrem 'PATH' hinzuzufügen, da könnte etwas mit WoW32 und dem Linker passieren (aber ich bin mir nicht sicher was). –

Antwort

0

java.library.path von PATH auf VM Start abgeleitet. java.library.path hat keine Auswirkung auf das Systemverhalten. Es wird nur verwendet, um zu bestimmen, wo die JVM den ersten Versuch unternimmt, native Bibliotheken zu laden.

Das System selbst verwendet PATH, um seine Suche nicht nur nach anfänglichen Lasten, sondern auch nach allen Abhängigkeiten zu informieren. Das einzige Steuer-JNA, das systemeigene Bibliotheken überlädt, ist, ob das Verzeichnis der Ziel-DLL in den Suchpfad für Abhängigkeiten eingeschlossen werden soll.