DLLs werden nicht gefunden trotz Pfad:

Ulathar

Aktives Mitglied
Hallo,
ich weiß es gibt bereits ettliche Themen rund um DLLs in Java einbinden, aber so seltsam es auch klingt, es will ums verrecken nicht klappen.
Ich sitze da nun schon Tage dran!

Das Problem ist folgendes:

Ich habe ein recht umfangreiches Programm welches auf JOGL basiert. In Eclipse funktioniert dies auch einwandfrei.

Nun will ich dieses Programm aber releasen und benötige dafür ein runable Jar. Das Problem hierbei ist nun die sache mit den DLLs, keine Sorge, mir geht es NICHT um das Extrahieren und anschließende Laden von dlls aus einem Jar, ich weiß dass das nur auf Umwegen möglich ist.

Obwohl die dlls im selben Ordner liegen wie mein JAR-File, werden diese NICHT gefunden/geladen.

Ich habe es mit System.loadLibrary(lib) probiert.
Ich habe es mit System.load(pfad+lib) probiert.
Ich habe es mit java -Djava.library.path=bla probiert.

Ich habe so ca alles probiert was ich hier dazu gefunden habe, aber es will einfach nicht. Wenn ich via System.load oder loadlib die jeweiligen libs lade, scheint alles okay zu sein (keine Fehler), aber sobald ich dann auf Funktionen in meinem Programm ausführe, die auf JOGL basieren, knallts mit der Meldung, dass keine jogl lib im java.library.path liegen würde, selbst dann, wenn ich die 1 zeile vor dem Funktionsaufruf noch mal via System.load lade.

Wenn ich den lib path via -Djava.library.path=bla auf den Ordner der Libs setzen will, bekomme ich auf der Console nur ne ClassNotFound meldung (mit ausgabe des neu gewählten Pfades).

Es ist mir ein absolutes Rätsel und ich kau langsam aber sicher an der Tischkante -.-.


Hat irgendjemand eine Idee?


EDIT:
OS ist W7 64 Bit, VMs sind JRE6 x86 und JR6 x64 (führe das Programm in der x86er aus da die libs 32 Bit sind).

Jar liegt in e:\Coding\SAFI\SAFI.jar
Libs liegen in e:\Coding\SAFI
 
wie gesagt:

der normale code hat weder n System.loadlib noch load.
Das klappt aber nur so lang ich das Programm aus Eclipse heraus starte.

Da die Arbeiten nun aber abgeschlossen und das Programm in eine "releasebare Form" gebracht werden muss haben sich die neuen Probleme ergeben 🙁.

Und wie oben erwähnt, scheint keine der 3 gängigen Mittel zu helfen. Ich schau mir jetzt mal deinen Link an, danke.


Edit:

Ok der Link hat nich weitergeholfen, bzw ist nicht mein Problem. In Eclipse funktioniert ja alles wunderbar, das problem ist dass er die DLLs nicht findet wenn mans als runable JAR exportiert (obwohl die dlls direkt neben dem JAR liegen).
 
Zuletzt bearbeitet:
Moin,

ich lad die jogl dlls im Zweifelsfall so. Als "AllesInEins.jar" lässt sich das dann sauber per Doppelklick starten. Man muss halt nur vorher noch das OS abfragen und dann die richtigen dlls laden. Wichtig ist, dass das unbedingt passiert, bevor die erste jogl Klasse geladen wurde, sonnst isses zu spät.

Beliebter Fehler ist:

Code:
public class T implements GLEventListener {
...
public static void main(String args[]){
	System.load(..) // schon zu spät...

Gruß,
Fancy
 
Okay habe die Problemursache gefunden, es liegt nicht an der Art und weise wie ich meine DLLs lade, sondern daran, dass auf meinem System eine x86 und eine x64 Java VM installiert ist.

Normalerweise entwickel ich in der x64 Umgebung, was aber auf grund von 32Bit dlls bei meinem JOGL programm nicht möglich ist (aus Eclipse heraus startet das Projekt immer in der x86 VM).

Aus irgend einem mir absolut unerklärlichem Grund erkennt die x86 VM den Working Directory nicht korrekt, also wenn ich via console das JAR starte mit der x86 VM ist der working directory nicht der ordner in dem das JAR liegt sondern der in dem die java.exe (also jre6/bin) liegt.

Aus diesem Grund findet er natürlich nicht die Libs....


Bleiben 2 Fragen offen:

1. wieso kann ich mit -Djava.library.path nicht den Pfad entsprechend mit übergeben? (erhalte immer class not found exceptions)

2. wieso findet mein programm trotz System.load(direkterpfadzurlib) die DLLs nicht? (die dateien selbst werden gefunden und somit wohl auch geladen, aber JOGL crasht dann mit ner unsatisfiedlink exception von wegen kein jogl gefunden etc pp so als hätte ich die libs nicht geladen).
 

Zurück
Oben