DLL laden

04/11/2011 - 22:22 von Philipp Kraus | Report spam
Hallo,

ich habe eine Anwednung mit JNI entwickelt, die unter OSX und Linux
funktioniert.
Ich compiliere eine Shared Library unter Cygwin, da ich gegen die Atlas
und LAPack linken muss
und ich diese nicht unter Visual Studio compiliert bekommen habe. Da
ich Cygwin einsetze werden
einige Cygwin spezifischen DLLs mit gelinkt. Ich habe nun alle
abhàngigen Libs mir rausgesucht
und diese zusammen in einen Ordner kopiert und diesen via PATH Variable
verfügbar gemacht.
Wenn nun meine Lib von dem Java Code geladen wird, zeigt der Procmon
von Sysinternals
auch an, dass alle abhàngigen DLLs gefunden und geladen werden. Aber der Code
erzeugt nicht das gewünschte Ergebnis, es sieht so aus, als würde der
bibliothekspezifische
Code nicht ausgeführt.

Wie kann ich herausbekommen, wo das Problem ist, es wird leider keine
Exception geworfen
und der Prozessexplorer zeigt auch keinen Fehler?

Um im Moment das ganze zu testen liegen die alle DLLs in einem Ordner,
der per PATH
zugànglich ist. Kann ich es auch erreichen, dass ich das nicht brauche? Also
ich kenne den Pfad zu meiner Hauptbibliothek, aber wenn ich den PATH nicht
gesetzt habe, dann findet die Hauptbibliothek die abhàngigen DLLs nicht
(Exception),
auch wenn die abhàngigen DLLs im gleichen Verzeichnis wie die
Hauptbibliothek liegen.
Bei OSX kann ich über das otool in der Hauptbibliothek festlegen, dass
abhàngige Libs
relativ zu der Hauptbibliothek gesucht / geladen werden sollen. Kann
man das bei
Windows auch machen?

Ich teste das ganze unter Windows 7 Professional

Danke

Phil
 

Lesen sie die antworten

#1 Stefan Reuther
05/11/2011 - 11:48 | Warnen spam
Philipp Kraus wrote:
Wenn nun meine Lib von dem Java Code geladen wird, zeigt der Procmon von
Sysinternals auch an, dass alle abhàngigen DLLs gefunden und geladen
werden. Aber der Code erzeugt nicht das gewünschte Ergebnis, es sieht
so aus, als würde der bibliothekspezifische Code nicht ausgeführt.



Deine spezielle Umgebung kenne ich nun nicht, habe aber die Erfahrung
gemacht, dass das Mischen von Cygwin- und Win32-Code keine gute Idee
ist. Hast du das schon mal mit einem Cygwin-Java probiert?

Um im Moment das ganze zu testen liegen die alle DLLs in einem Ordner,
der per PATH zugànglich ist. Kann ich es auch erreichen, dass ich das
nicht brauche? Also ich kenne den Pfad zu meiner Hauptbibliothek, aber
wenn ich den PATH nicht gesetzt habe, dann findet die Hauptbibliothek
die abhàngigen DLLs nicht (Exception), auch wenn die abhàngigen DLLs
im gleichen Verzeichnis wie die Hauptbibliothek liegen.



Das hatten wir vor ein paar Wochen im Thread "Systempfad "Path" nach
Änderung in der Registry aktualisieren?". Kurzfassung: DLLs in
Verzeichnis der Anwendung kopieren, PATH im Programm selbst umbiegen
oder SetDllDirectory.


Stefan

Ähnliche fragen