Le but est d'appeler une méthode C depuis une application Java. Pour cela, j'utilise JNI.
J'ai la classe suivante en java :
Et j'ai le fichier JNITestC.c suivant, en C :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class JNITest { public static void main(String[] args) { System.out.println("Avant"); // pour le debug try { System.loadLibrary("JNITestC"); } catch(Throwable exc) { exc.printStackTrace(); } System.out.println("Après"); // pour le debug } }
Je compile tout sans aucun problème (je n'ai pas oublié le javah pour le fichier header du C), et quand je lance l'exécution, ca bloque et ca quitte au moment du System.loadLibrary. Je lis bel et bien le message "Avant", mais le programme me rend la main juste après, sans le moindre message d'erreur.#include <jni.h>
#include "JNITest.h"
#include <stdio.h>
JNIEXPORT void JNICALL
Java_JNITest_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
Ce n'est pas un problème de path étant donné que si j'efface le dll, j'ai une UnsatisfiedLinkError.
Je pense que c'est un problème de compilation. Je compile avec gcc (sorti de Cygwin) et j'ai essayé beaucoup de paramètres, entre autre "-mdll", "-shared" et certains autres dont je ne sais même pas à quoi ils servent.
Quelqu'un aurait-il une idée ?
Partager