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 :

Problème JNI et gcc sous Linux


Sujet :

Entrée/Sortie Java

  1. #1
    Membre du Club Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 64
    Points
    64
    Par défaut Problème JNI et gcc sous Linux
    Bonjour à tous,
    je suis entrain de me documenter sur la Java Native Interface pour un futur projet et je me heurte à un problème que je n'arrive pas à résoudre.

    Voici ma classe Java [fetchInf.java]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class fetchInf {
            private native void fetchInfs();
            public static void main(String[] args) {
                    new fetchInf().fetchInfs();
            }
            static { System.load("libfetchInf.so"); }
    }
    Je compile le fichier : javac fetchInf.java, j'obtiens fetchInf.class

    Je génère le fichier .h : javah -jni fetchInf, j'obtiens fetchInf.h

    J'écris ensuite mon fichier C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <jni.h>
    #include <stdio.h>
    #include "fetchInf.h"
     
    JNIEXPORT void JNICALL Java_fetchInf_fetchInfs(JNIEnv *env, jobject obj)
    {
        printf("Hello World!\n");
        return;
    }
    Je build ensuite ma build library libfetchInf.o grace à la commande :

    cc -shared -g -I/usr/lib/jvm/java-6-sun-1.6.0.15/include -I/usr/lib/jvm/java-6-sun-1.6.0.15/include/linux fetchInf.c -o libfetchInf.so

    Jusque là je n'ai aucune erreur !

    Dès que je veux exécuter mon fichier Java avec la commande: java fetchInf, j'obtiens l'erreur suivante :

    Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: libfetchInf.so
    at java.lang.Runtime.load0(Runtime.java:784)
    at java.lang.System.load(System.java:1022)
    at fetchInf.<clinit>(fetchInf.java:6)
    Could not find the main class: fetchInf. Program will exit.

    J'ai cherché sur pas mal de forum mais je n'ai pas trouvé de solution !

    Merci d'avance
    Il n'y aurait pas plus heureux qu'un élève qui ,comme la rivière, pourrait suivre son cours sans sortir de son lit.

  2. #2
    Membre du Club Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par undercrash Voir le message
    Bonjour à tous,
    je suis entrain de me documenter sur la Java Native Interface pour un futur projet et je me heurte à un problème que je n'arrive pas à résoudre.

    Voici ma classe Java [fetchInf.java]:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class fetchInf {
            private native void fetchInfs();
            public static void main(String[] args) {
                    new fetchInf().fetchInfs();
            }
            static { System.load("libfetchInf.so"); }
    }
    Je compile le fichier : , j'obtiens fetchInf.class

    Je génère le fichier .h : , j'obtiens fetchInf.h

    J'écris ensuite mon fichier C :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #include <jni.h>
    #include <stdio.h>
    #include "fetchInf.h"
     
    JNIEXPORT void JNICALL Java_fetchInf_fetchInfs(JNIEnv *env, jobject obj)
    {
        printf("Hello World!\n");
        return;
    }
    Je build ensuite ma build library libfetchInf.o grace à la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cc -shared -g -I/usr/lib/jvm/java-6-sun-1.6.0.15/include -I/usr/lib/jvm/java-6-sun-1.6.0.15/include/linux  fetchInf.c -o libfetchInf.so
    Jusque là je n'ai aucune erreur !

    Dès que je veux exécuter mon fichier Java avec la commande: java fetchInf, j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Exception in thread "main" java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: libfetchInf.so
    	at java.lang.Runtime.load0(Runtime.java:784)
    	at java.lang.System.load(System.java:1022)
    	at fetchInf.<clinit>(fetchInf.java:6)
    Could not find the main class: fetchInf. Program will exit.
    J'ai cherché sur pas mal de forum mais je n'ai pas trouvé de solution !

    Merci d'avance
    Il n'y aurait pas plus heureux qu'un élève qui ,comme la rivière, pourrait suivre son cours sans sortir de son lit.

  3. #3
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    bonjour,


    tape le chemin absolu comme paramètre à la méthode System.load()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.load("C:\\tonChemin\\libfetchInf.so")

  4. #4
    Membre du Club Avatar de undercrash
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 156
    Points : 64
    Points
    64
    Par défaut
    Citation Envoyé par Auteur Voir le message
    bonjour,


    tape le chemin absolu comme paramètre à la méthode System.load()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.load("C:\\tonChemin\\libfetchInf.so")
    Ah yes ça marche

    Un grand merci à toi
    Il n'y aurait pas plus heureux qu'un élève qui ,comme la rivière, pourrait suivre son cours sans sortir de son lit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème gcc sous linux
    Par naspy dans le forum Linux
    Réponses: 8
    Dernier message: 28/01/2014, 23h22
  2. problème de fifo bloquant sous linux
    Par Fonzy007 dans le forum POSIX
    Réponses: 6
    Dernier message: 20/05/2009, 09h44
  3. Problème eclipse en français sous Linux
    Par Arthuris dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 04/05/2007, 15h41
  4. Problème de jardinage mémoire sous Linux
    Par Mike29 dans le forum C
    Réponses: 7
    Dernier message: 01/08/2006, 19h02
  5. [débutant]compiler avec gcc sous linux
    Par Ickou dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 10/03/2006, 17h27

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