Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

JNI und Shared Libraries

9 views
Skip to first unread message

Klaus Leopold

unread,
Oct 23, 2003, 9:36:16 AM10/23/03
to
Hallo *,

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

Jörg Baumann

unread,
Oct 23, 2003, 9:46:50 AM10/23/03
to
Klaus Leopold wrote:


> 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

Dirk Müller

unread,
Oct 23, 2003, 10:57:30 AM10/23/03
to
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...?
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

Klaus Leopold

unread,
Oct 23, 2003, 10:40:58 AM10/23/03
to
Oh mein Gott! Ich verstehe die Welt nicht mehr. Ja, das hilft und vielen
Dank für diesen Tipp!!!

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:

Klaus Leopold

unread,
Oct 23, 2003, 10:48:23 AM10/23/03
to
Dirk Müller 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

Holger Veltrup

unread,
Oct 24, 2003, 8:38:46 AM10/24/03
to
Hey,

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

0 new messages