OVH Cloud OVH Cloud

jni

4 réponses
Avatar
stef
Salut à tous,
J'appelle a l'aide au pro du JNI :

Sous Linux rh 7.3
Je teste un petit prog pour interfacer du natif.
En gros ca donne :

class hello
{
static { System.loadLibrary("hello"); }


public native void afficherHello();

public static void main(String[] args)
{
System.out.println("Hello, world!");
}
}

ok,
$ javac hello.java
$ javah -jni hello

en C :
#include "hello.h"
#include "jni.h"

JNIEXPORT void JNICALL Java_hello_afficherHello( JNIEnv *env, jobject obj )
{
printf("Hello world!\n");
return;
}

je compile le C avec
gcc -I ${JAVA_HOME}/include/ -I ${JAVA_HOME}/include/linux/ -o
hello.so -shared -fpic -lc hello.c

nickel,
je place export LD_LIBRARY_PATH=<repertoire ou se trouve mon hello.so>


et a chaque : java hello
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hello in
java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1491)
at java.lang.Runtime.loadLibrary0(Runtime.java:788)
at java.lang.System.loadLibrary(System.java:834)
at hello.<clinit>(hello.java:3)

pourtant je peux executer du code java "normal"

ou est mon erreur ???

merci d'avance à tous...

4 réponses

Avatar
Nicolas Delsaux
Le 17.01 2004, stef s'est levé et s'est dit : "tiens, si j'écrivais aux
mecs de fr.comp.lang.java ?"

Salut à tous,
J'appelle a l'aide au pro du JNI :

Sous Linux rh 7.3
Je teste un petit prog pour interfacer du natif.
En gros ca donne :

class hello
{
static { System.loadLibrary("hello"); }


public native void afficherHello();

public static void main(String[] args)
{
System.out.println("Hello, world!");
}
}

ok,
$ javac hello.java
$ javah -jni hello

ou est mon erreur ???


Est-ce que ta librairie est dans ton CLASSPATH ? ou dans ton
LD_LIBRARRY_PATH (même si je crois qu'elle doit se trouver dans le
premier) ?
Et je crois d'ailleurs qu'il faut donner le nom avec l'extension. Tout au
moins, quand j'en ai fait, il y a un bon bout de temps, c'est comme ça
qu'il fallait faire, si je me souviens bien.

merci d'avance à tous...






--
Nicolas Delsaux
"Une nymphomane est une femme aussi obsédée par le sexe que l'homme
moyen."
Mignon McLaughlin

Avatar
stef
Merci quand meme Nicolas, mais j'ai juste oublie le lib devant l'option de
compilation...

Désolé le ferait plus !
Avatar
Bengali
stef wrote:
Merci quand meme Nicolas, mais j'ai juste oublie le lib devant l'option de
compilation...

Désolé le ferait plus !

Salut,

est-ce que tu pourrais donner l'option de compilation manquante,
ça m'intéresse je découvre JNI (et gcc sous Linux) et j'ai le même problème.

Merci,
bangali

Avatar
stef
Salut,
est-ce que tu pourrais donner l'option de compilation manquante,
ça m'intéresse je découvre JNI (et gcc sous Linux) et j'ai le même
problème.


lors de la creation de la lib en C il faut nommer le .so en
lib<nom_class>.so
classique. (voila ce que c'est de passer sa vie avec win$ :):):) )

ex: dans le cas d'une lib hello

gcc -o libhello.so -shared -lc hello.c


voilou