fReUnD
Grünschnabel
Hallo,
bisher habe ich nur passiv gelesen, aber jetzt komme ich so nicht weiter...
Um was es geht:
Ich möchte einfach nur meine native Bibliothek, die sich in demselben Java Archiv wie meine Classfiles befindet, laden.
Die Struktur in meinem JAR:
-cdromlib.dll
-foobar
Codeausschnitt aus der Server.java:
Fall 1:
Die Binaries und die Lib liegen in D:/foobar/
path.getFile() liefert mir den richtigen Pfad in folgender Syntax zurück:
/D:/foobar/cdromlib.dll
System.load() lädt anhand des Strings die Bibliothek => alles in Ordnung
Fall 2:
Die Binaries liegen in D:/foobar/foobar.jar
path.getFile() liefert mir den Pfad in folgender Syntax zurück:
file:/D:/foobar/foobar.jar!/cdromlib.dll
System.load() kann mit diesem String nichts anfangen, Fehlermeldung:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library:
D:/foobar/foobar.jar!/cdromlib.dll
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at foobar.Server.<clinit>(Server.java:30)
Zusatzbemerkungen:
Zunächst habe ich auch System.loadLibrary() probiert, die Methode findet aber meine Library im Fall 2 (mit Java Archiv) ebenfalls nicht.
Müsste ich dafür in der Manifest spezielle Classpaths setzen?
Wenn ja, welche und wie sieht die Syntax aus?
Über Google bin ich auf "load.library.path" aufmerksam geworden, ich weiss aber nicht, wie ich das Attribut setzen soll.
Wenn ich das Problem doch über System.load() lösen möchte, welche Syntax erwartet die Methode für den Fall 2? Ich habe darüber in der API DOC leider keine Angaben gefunden.
Falls es noch einen ganz anderen Weg gibt, wäre ich auch für einen solchen Hinweis sehr dankbar.
MFG
fReUnD
bisher habe ich nur passiv gelesen, aber jetzt komme ich so nicht weiter...
Um was es geht:
Ich möchte einfach nur meine native Bibliothek, die sich in demselben Java Archiv wie meine Classfiles befindet, laden.
Die Struktur in meinem JAR:
-cdromlib.dll
-foobar
-Server.class
-... weitere classes
-META-INF-MANIFEST.MF
Codeausschnitt aus der Server.java:
Code:
URL path = ClassLoader.getSystemResource("cdromlib.dll");
System.out.println(path.getFile());//Debug-Ausgabe
System.load(path.getFile());
Fall 1:
Die Binaries und die Lib liegen in D:/foobar/
path.getFile() liefert mir den richtigen Pfad in folgender Syntax zurück:
/D:/foobar/cdromlib.dll
System.load() lädt anhand des Strings die Bibliothek => alles in Ordnung
Fall 2:
Die Binaries liegen in D:/foobar/foobar.jar
path.getFile() liefert mir den Pfad in folgender Syntax zurück:
file:/D:/foobar/foobar.jar!/cdromlib.dll
System.load() kann mit diesem String nichts anfangen, Fehlermeldung:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Can't load library:
D:/foobar/foobar.jar!/cdromlib.dll
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.load0(Unknown Source)
at java.lang.System.load(Unknown Source)
at foobar.Server.<clinit>(Server.java:30)
Zusatzbemerkungen:
Zunächst habe ich auch System.loadLibrary() probiert, die Methode findet aber meine Library im Fall 2 (mit Java Archiv) ebenfalls nicht.
Müsste ich dafür in der Manifest spezielle Classpaths setzen?
Wenn ja, welche und wie sieht die Syntax aus?
Über Google bin ich auf "load.library.path" aufmerksam geworden, ich weiss aber nicht, wie ich das Attribut setzen soll.
Wenn ich das Problem doch über System.load() lösen möchte, welche Syntax erwartet die Methode für den Fall 2? Ich habe darüber in der API DOC leider keine Angaben gefunden.
Falls es noch einen ganz anderen Weg gibt, wäre ich auch für einen solchen Hinweis sehr dankbar.
MFG
fReUnD
Zuletzt bearbeitet: