JNI Problème de débutant ?
Bonjour
J'ai un repertoire dans le quels j'ai le fichier java suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11
|
public class Coucou {
private native void affiche();
public static void main(String args[]) {
new Coucou().affiche();
}
static {
System.loadLibrary("coucou"); }
} |
que je compile via javacc.
Ensuite, je genere dans le même repertoire , un fichier coucou.h via javah.
j'implemente comme suit ,coucou.c à partir de coucou.h
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
/* coucou.C */
#include <jni.h>
#include "coucou.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Java_Coucou_affiche (JNIEnv *, jobject) {
cout << "Depuis code C++ \n ... j'affiche ...\n COUCOU";
} |
je compile via g++ -I.... -> j'obtiens un coucou.o
j'utilise la commande g++ -shared ... -> j'obtiens un coucou.so
Super!
Sauf que quand je lance 'java Coucou', il me sort une erreur
Code:
1 2 3 4 5 6 7
|
xception in thread "main" java.lang.UnsatisfiedLinkError: no coucou in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1709)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at Coucou.<clinit>(Coucou.java:12)
Could not find the main class: Coucou. Program will exit. |
J'ai bien essayé de mettre les chemins dans LD_LIBRARY_PATH, etcetc, mais rien ne semble fonctionner...
Notez bien que les fichier java, class, o, h, c, so sont tous dans le même repertoire.
Que faire ?