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:

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;
}
j'ai compilé avec gcc (MinGW)
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:
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.h
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
fonction.c
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**********************************");
}
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.

si jamais vous avez une petite idée de ce que je peux faire n'hésitez pas...

@+