Utilisation de JNI

Résolu
wilkom2009 Messages postés 50 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 7 août 2012 - 19 avril 2011 à 11:15
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 - 21 avril 2011 à 18:00
Salut,
Je voudrais faire une interaction entre code java et code C++. Suite aux recherches je suis tombé sur le JNI. Mais j'avoue que mes premiers tests me sont difficiles. D'abord, en lisant les tuto, on parle de bibliothèque à charger, mais je ne sais pas s'il s'agit des bibliothèques prédéfinies en java ou des bibliothèques que je crée moi-même, voici le code suivant:
++++++++++++++++++++++
class TestJNI1 {
public native void afficherBonjour();
static {
System.loadLibrary("mabibjni");
}

public static void main(String[] args) {
new TestJNI1().afficherBonjour();
}
}
+++++++++++++++++++++++++++++
Question1: le paramètre "mabibjni" est-il dans les bibliothèques prédéfines de java ou juste crée après la compilation de TestJNI1?
Question2: Lorsque j'exécute cette classe, j'ai le message d'erreur suivant:
(((((java.lang.UnsatisfiedLinkError: no mabibjni in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at TestJNI1.<clinit>(TestJNI1.java:4)
Exception in thread "main" ))))), qu'est-ce qui ne va pas? Voudriez-vous m'expliquer un peu le principe de JNI? Je bosse avec Eclipe et JRE6.

Merci, et excusez-moi pour ces questions un peu "terre à terre".

4 réponses

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
21 avril 2011 à 18:00
Re,



-----------------------------------------
Je ne suis pas en train de chercher des codes sources cuits, juste comment procéder à une exécution d'un programme test et le reste dépendra de moi. Merci pour votre compréhension.


Ha nan mais ma signature n'est pas adressée à ce poste hein


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
3
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
21 avril 2011 à 14:20
Salut,

Réponse 1: malibjni DOIT etre ta lib native (dll ou so)
Réponse 2: oui il faut l'ajouter au LD path pour que java puisse la charger... soit tu places ta lib dans le path de ton OS soit au lancement de ton application tu passe la bonne option à java.
Soit ici je parts du principe que ton application est dans un jar appelé monjar.jar et que ta lib est dans le répertoire courant :
java -Djava.library.path=. -jar monjar.jar

Cela dit si tu n'es pas dans tes baskettes quand à l'utilisation de JNI et surtout des conceptes de chargement de libs en C/C++ (ce qui semble être le cas ici) je te conseil plus d'oublier JNI et de passer par JNA qui te permet de faire du code natif sans passer par du C/C++


------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
wilkom2009 Messages postés 50 Date d'inscription jeudi 8 avril 2010 Statut Membre Dernière intervention 7 août 2012
21 avril 2011 à 17:54
Salut!
Merci Twinuts, j'ai configuré la variable d'environnement et tout se passe bien, j'ai compilé le code java jusqu'à créer le fichier .h, maintenant j'ai encore un autre problème: c'est l'exécution de la ligne de commande:
[gcc -I "%JAVA_HOME%\include" -I"%JAVA_HOME\include\Win32%" -o TestJNI.o TestJNI.c]
pour compiler le fichier TestJNI.c que j'ai crée en C.
L'exécution de cette commande sous DOS me signale que gcc n'est pas une commande Windows valide.
Que faut-il faire?

Merci.

-----------------------------------------
Je ne suis pas en train de chercher des codes sources cuits, juste comment procéder à une exécution d'un programme test et le reste dépendra de moi. Merci pour votre compréhension.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
21 avril 2011 à 17:59
Salut,

si tu es sous windows passe par M$ Visual (la version gratis fait bien l'affaire) ou par un autre ide, tu te prendras 100000000000000 fois moins la tête...

GCC est un compilateur GNU qui n'est pas natif Windows et il me semble même qu'il n'est pas dispo sans passer par des applications annexes




------------------------------------
"On n'est pas au resto : ici on ne fait pas dans les plats tout cuits ..."

OoWORAoO
0
Rejoignez-nous