ich verwende JNI um Native-(Linux-)Code auszuführen. Das funktioniert so
weit wunderbar, bis zu dem Moment, wo meine Native-Implementierung eine
Shared Library laden will.
Beispiel: die Native-Library ist library.so, zu welcher eine andere
Shared-Libary (libSharedLinkedLib.so) dazugelinkt wird, da library.so
Funktionen von libSharedLinkedLib.so verwendet. Bei dem Aufruf
System.loadLibrary(rary) sagt Java folgendes:
Exception in thread "main" java.lang.UnsatisfiedLinkError:
/path/to/my/native/library.so: libSharedLinkedLib.so: cannot open shared
object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1473)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1397)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:832)
Wenn ich libSharedLinkedLib.so nicht zu library.so linke, funktioniert JNI
wunderbar. Hat jemand eine Ahnung, wo das Problem liegt?
Besten Dank schon mal im Voraus!
Klaus
> Exception in thread "main" java.lang.UnsatisfiedLinkError:
> /path/to/my/native/library.so: libSharedLinkedLib.so: cannot open shared
> object file: No such file or directory
libSharedLinkedLib.so nicht in den Standardpfaden?
Dann hilft LD_LIBRARY_PATH zu setzen:
e.g. export LD_LIBRARY_PATH=/path/to/libSharedLinkedLib:$LD_LIBRARY_PATH
> Bei dem Aufruf System.loadLibrary(rary) sagt Java folgendes:
^^^^
Ist das ein Schreibfehler...?
Oder ein String? Was steht drin, im String?
Ich weiß jetzt nicht, wie das mit Pfadangaben bei System.loadlibrary ist.
Probier mal, ob es funktioniert, wenn du ...
System.loadLibrary("rary");
...schreibst und du die beiden Bibliotheken in einem Verzeichnis hast, wo
sie gefunden werden. (unter Windows wäre das im PATH oder System32)
Notfalls mal im gleichen Verzeichnis wie dein Programm...
Gruß, Dirk
ABER: ich rufe das Java-Prg. mit
-D"java.library.path=/path/to/my/shared/lib" auf. Weiters habe ich auch
versucht, mit System.setProperties("java.library.path", ...) den
Library-Pfad zu erweitern - keine Chance.
Das wirft für mich eine andere Frage auf: was ist der library.path in
-Djava.library.path bei java bzw.
System.setProperties("java.library.path...)?
Klaus
Jörg Baumann wrote:
> Am Thu, 23 Oct 2003 15:36:16 +0200 hat Klaus Leopold
> <k...@itec.uni-klu.ac.at> geschrieben:
>
>> Bei dem Aufruf System.loadLibrary(rary) sagt Java folgendes:
> ^^^^
> Ist das ein Schreibfehler...?
ja! muss natürlich System.loadLibrary("rary") heissen!!
> Oder ein String? Was steht drin, im String?
> Ich weiß jetzt nicht, wie das mit Pfadangaben bei System.loadlibrary ist.
> Probier mal, ob es funktioniert, wenn du ...
>
> System.loadLibrary("rary");
>
> ...schreibst und du die beiden Bibliotheken in einem Verzeichnis hast, wo
> sie gefunden werden. (unter Windows wäre das im PATH oder System32)
> Notfalls mal im gleichen Verzeichnis wie dein Programm...
Das ist ja genau das komische - library.so und die andere sind im gleichen
Pfad!
Klaus
ich hatte so ein ähliches Problem mit ImageMagic.
Da hat das geholfen: (SuSE 8.0)
LD_LIBRARY_PATH=/path/to/my/native
DYLD_LIBRARY_PATH=/path/to/my/native
Gruß Holger