Hallo,
ich spring hier bald im Dreieck. Ich habe ein Problem mit meinem Programm zur Laufzeit dlls zu laden.
Konkret geht es um JOGL. Ich bestimme zur Laufzeit auf welcher Plattform mein Programm ausgeführt wird (Windows, Mac oder Linux) und anschließend die Architektur (x86 oder amd64).
Basierend auf diesem "Wissen" soll mein Programm die entsprechenden Libs laden.
Soweit die Theorie.
In der Praxis bekomme ich aber einfach nicht die dlls, sos, etc geladen.
Beispielcode:
Analog dazu gehe ich bei allen anderen Möglichkeiten vor.
Ich sehe da einfach nicht den Fehler, aber es funktioniert einfach nicht. Die jeweiligen libs sind auch garantiert vorhanden und werden auch gefunden.
Aber im oberen Beispiel meckert der ClassLoader immer, dass die die gluegen nicht die notwendigen dependencies findet.
Ganz egal in welcher Reihenfolge ich die Libs lade.
Lasse ich die lib weg, knallt es (logischerweise) sobald ich meine JOGL Szene starte mit einer unsatisfied linker exception (could not find dll).
Wenn ich das Programm aus Eclipse heraus starte, funktioniert es einwandfrei, da ich in Eclipse die Libpfade im Projekt entsprechend gesetzt habe, nur leider wird mein "clientel" das programm NICHT aus Eclipse heraus starten
.
Ich versteh einfach nicht warum das nicht klappen will.
Habe auch schon versucht bei meinem Launcher (mittels launch4j generiert) den lib path zu setzen, mittels:
"-Djava.library.path="./lib/win_x64""
das funktioniert dann auch, aber NUR wenn ich das programm in einer 64bit vm unter windows ausführe. sobald ich z.b. das hier mache:
-Djava.library.path="./lib/win_x64;./lib/win_x86"
und das programm in einer x86 umgebung starten will, meckert er, da er unter x86 keine 64bit dlls laden kann (logisch).
bin für jede Anregung dankbar... so schwer kann das doch echt nicht sein -.-.
ich spring hier bald im Dreieck. Ich habe ein Problem mit meinem Programm zur Laufzeit dlls zu laden.
Konkret geht es um JOGL. Ich bestimme zur Laufzeit auf welcher Plattform mein Programm ausgeführt wird (Windows, Mac oder Linux) und anschließend die Architektur (x86 oder amd64).
Basierend auf diesem "Wissen" soll mein Programm die entsprechenden Libs laden.
Soweit die Theorie.
In der Praxis bekomme ich aber einfach nicht die dlls, sos, etc geladen.
Beispielcode:
Java:
if(Settings.OS_NAME.toLowerCase().contains("windows")) {
if(Settings.OS_ARCH.equals("amd64")) {
try {
System.load(Settings.LIB_PATH + "win_x64\\jogl.dll");
System.load(Settings.LIB_PATH + "win_x64\\jogl_awt.dll");
System.load(Settings.LIB_PATH + "win_x64\\gluegen-rt.dll");
System.load(Settings.LIB_PATH + "win_x64\\jogl_cg.dll");
System.out.println("Success! ");
}catch(Exception e) {
System.out.println("Failed! ");
e.printStackTrace(System.err);
}
}else {
//
}
SwingUtilities.invokeLater(new Runnable() {
public void run() {
gui = new MainFrame(console);
gui.setVisible(true);
}
});
Analog dazu gehe ich bei allen anderen Möglichkeiten vor.
Ich sehe da einfach nicht den Fehler, aber es funktioniert einfach nicht. Die jeweiligen libs sind auch garantiert vorhanden und werden auch gefunden.
Aber im oberen Beispiel meckert der ClassLoader immer, dass die die gluegen nicht die notwendigen dependencies findet.
Ganz egal in welcher Reihenfolge ich die Libs lade.
Lasse ich die lib weg, knallt es (logischerweise) sobald ich meine JOGL Szene starte mit einer unsatisfied linker exception (could not find dll).
Wenn ich das Programm aus Eclipse heraus starte, funktioniert es einwandfrei, da ich in Eclipse die Libpfade im Projekt entsprechend gesetzt habe, nur leider wird mein "clientel" das programm NICHT aus Eclipse heraus starten
Ich versteh einfach nicht warum das nicht klappen will.
Habe auch schon versucht bei meinem Launcher (mittels launch4j generiert) den lib path zu setzen, mittels:
"-Djava.library.path="./lib/win_x64""
das funktioniert dann auch, aber NUR wenn ich das programm in einer 64bit vm unter windows ausführe. sobald ich z.b. das hier mache:
-Djava.library.path="./lib/win_x64;./lib/win_x86"
und das programm in einer x86 umgebung starten will, meckert er, da er unter x86 keine 64bit dlls laden kann (logisch).
bin für jede Anregung dankbar... so schwer kann das doch echt nicht sein -.-.