Bonjour

J'ai un repertoire dans le quels j'ai le fichier java suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?