2016-03-25 10 views
2

Ich erbte ein funktionierendes großes Java8-Projekt, das neu entworfen werden muss. Es baut ein jar, aber beinhaltet auch ein Beispiel main (nicht im jar enthalten) und einen tiefen baum von libs einschließlich einige .dll-dateien tief in der libs/tree (dll ist auch NICHT im glas enthalten).Wie legt Eclipse den Native.loadLibrary-Pfad fest?

An einem bestimmten Punkt ruft der Code im Jar Native.loadLibrary ("fti2x.dll", fti2xWrapper.class, [Map < String, Integer>] Optionen) auf den einfachen Dateinamen "fti2x.dll" auf - ohne Pfadkomponenten - und die Ladung ist erfolgreich. Diese .dll befindet sich nur tief im Verzeichnis libs/auf meinem Computer. Wie hat das jar, läuft unter der Sonnenfinsternis, herauszufinden, das war in /libs/client/usb/CommLib/amd64/fti2x.dll ohne Angabe des Pfades dazu?

Wenn ich nur das jar, das Beispiel main und das Verzeichnis libs/in ein neues Projekt kopiere, wie konfiguriere ich es in Eclipse (Mars), um die .dll für den Native.loadLibrary-Aufruf zu finden? (Das scheitert einfach, deshalb fehlt mir eine Konfiguration.)

Wie führe ich die main.class außerhalb von Eclipse aus und lasse sie die .dll finden?

Gibt es möglicherweise einige Java-Code, der fehlt, der diesen Pfad festlegt? Wenn ja, wonach suche ich?

Antwort

0

Es gibt eine Systemeigenschaft, die verwendet wird, um den Pfad anzugeben, den JNA nach systemeigenen Bibliotheken sucht: jna.library.path. Versuchen Sie, den Wert auszudrucken, unmittelbar nachdem die Bibliothek im alten Projekt erfolgreich geladen wurde, um festzustellen, ob sie gesetzt ist.

This answer erläutert, wie eine Systemeigenschaft in einer Eclipse-Laufkonfiguration festgelegt wird. Geben Sie außerhalb von Eclipse einen Wert dafür an, indem Sie den Befehlszeilenschalter -D für die JVM verwenden, z.

java -Djna.library.path=<some path> YourMainClass 
Verwandte Themen