IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entrée/Sortie Java Discussion :

Java - JNI : arrêt à System.loadLibrary()


Sujet :

Entrée/Sortie Java

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Java - JNI : arrêt à System.loadLibrary()
    Bonjour,

    J'ai un .dll à charger, qui refuse de se charger.
    Il n'y a aucun message d'erreur, le programme run toujours mais ne fait plus rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public class HelloWorld {
     
    	private static native int getMagicInt();
     
    	public static void main(String[] args) {
    		System.loadLibrary("HelloWorld");
    		int temp = getMagicInt();
    		System.out.println(temp);
    	}
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    JNIEXPORT jint JNICALL Java_HelloWorld_getMagicInt(JNIEnv *env, jclass c)
    {
    	return 7011;
    }

  2. #2
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    Bonjour ,
    Veuillez préciser les bibliothèque c que vous avez ajouter dans le fichier include de la JDK ,
    Ainsi que le commande que vous avez tapez pour gêner le fichier .ddl ,
    Afin qu'on puisse vous donnez un coup de main.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    La bibliothèque se nomme HelloWorld.dll, et ne contient que la fonction ci-dessus.
    Elle a été généré en 2 étapes, soit
    javah -jni HelloWorld
    qui produit HelloWorld.h
    Puis
    gcc -mdll -I jdk/include -I jdk/include/win32 -L lib/mingw -o HelloWorld.dll HelloWorld.c

    Je cherche à tester le JNI, et j'ai regardé plusieurs tutoriels sans résultats.

  4. #4
    Membre régulier
    Profil pro
    Ingénieur d'études et développement JAVA
    Inscrit en
    Mai 2008
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études et développement JAVA
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 202
    Points : 103
    Points
    103
    Par défaut
    vous n'avez pas donnée de précision (si ta ajouter les bibliothéque nécessaire de MinGui dans le répertoire include de la JDK) concernant ton environnement tous ce que je sais c'est que c'est un windows:
    Bref voila les 6 étapes a suivre pour pouvoir utilisé tes fonction c ou c++ :
    1-Tu crée une classe ou tu déclare tes méthodes native dans ton cas "HelloWorld.java"
    2-Tu compile la classe avec javac pour avoir le fichier "HelloWorld.class"
    3-Puis tu tu utilise javah -jni pour génere les fichiers d'entete "HelloWorld.h"
    (qui contient les déclarations prototype des fonctions wrapper(envoloppe) qui prend les paramétres de java est les convertir en paramétre de c .)
    4-tu fait un copie coller du fichier génere et tu le renome avec l'extention "HelloWorld.c"
    et biensure tu impléments tes focntions c.
    5-une fois que ta le fichier "HelloWorld.c" , tu peux génere la bibliothéque ntaive "HelloWorld.dll" en le compilant
    6-une fois que ta le HelloWorld.dll te reste plus qu'a exécuter et t'aura le résultat.

    ps: si ta d'autre question n’hésite pas , mais avant vérifie ton environnement.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Oui, c'est exactement les étapes que j'ai suivi. J'ai fait ( et refait ) plusieurs tutoriaux, mais le problème reste le même, le programme s'arrête quand vient le temps de charger la librairie.

    Donc, pour l'environnement :
    Windows 7.
    JDK 1.6.0_18
    GCC 4.3.4

    Je travail sous Cygwin.

    J'ai vérifié les dépendances de ma librairie native, et j'ai ajouté les .dll appropriées au même endroit que celle-ci.
    J'ai déjà eu le message d'erreur indiquant que la JVM ne trouvait pas les librairies, mais ce n'est plus le cas. Le programme "freeze" vraiment.

Discussions similaires

  1. JNI et java et fichier system.dll
    Par younes12 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 08/09/2009, 14h31
  2. Réponses: 5
    Dernier message: 14/12/2007, 16h53
  3. [java -D] plusieurs system properties
    Par phoebe dans le forum Langage
    Réponses: 1
    Dernier message: 16/11/2006, 10h40
  4. Réponses: 1
    Dernier message: 06/10/2006, 10h21
  5. [JNI]System.loadLibrary()
    Par hfranck dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 28/01/2005, 14h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo