salut,
je cherche à réaliser une "Java Native Interface". j'ai commencé par faire afficher du texte par la fonction exporté grace à un printf.
de Java je crée Test.h, ce qui me donnde la signature de la fonction exportée.
ensuite dans Test.c j'implémente cette fonction comme cela:
j'ai compilé avec gcc (MinGW)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 JNIEXPORT void JNICALL Java_Test_afficherBonjour(JNIEnv *env, jobject obj) { printf("\nBonjour"); return; }
ensuite avec le .o et un .def j'ai crée le .dll
a partir de java j'arrive bien à me servir de cette fonction tout est ok!
maintenant, passons à mon probleme.
quand dans la fonction native j'utilise une fonction implementé dans un autre .c, j'arrive à compilé mais lors de la création de la dll, le compilo me donne le message d'erreur undefined reference to "afficher".
voici mon code...
Test.c:
fonction.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 #include <jni.h> #include <stdio.h> #include "Test.h" #include "fonction.h" JNIEXPORT void JNICALL Java_Test_afficherBonjour(JNIEnv *env, jobject obj) { afficher("Bonjour"); return; }
fonction.c
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 #ifndef _FONCTION_ #define _FONCTION_ void afficher (char *txt); #endif
donc je cherche à savoir pourquoi quand je compile gcc arrive à trouver les .h include mais lors de la création de la dll implossible de linker. en effet si j'implemente afficher directement dans Test.c tout marche au poil.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 #include <stdio.h> #include "fonction.h" void afficher (char *txt) { printf("\n**********************************"); printf("\n %s", txt); printf("\n**********************************"); }
si jamais vous avez une petite idée de ce que je peux faire n'hésitez pas...
@+
Partager