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

Eclipse Java Discussion :

PATH et eclipse


Sujet :

Eclipse Java

  1. #1
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut PATH et eclipse
    Bjr a tous,

    voila j'ai cree une librairie .so (en c++) et utilise JNI pour interfacer du code c++ ... rin de bien mechant
    donc je me suis cree mon petit exemple sans passer par eclipse ... ce qui marche tres bien ...
    ensuite je passe sur eclipse pour retester en creant mon propres projet ... marche tjrs tres bien

    Maintenant j'aimerais integrer cette classe (qui me sert de lien vers la librairie .so) ds un projet donc je cree un nveau package ... et la il ne veut plus me charger la librairie alors que le .so se trouve tjrs a cote de lui exactement ds la meme config qu'avant ...

    donc la j'avoue que je ne comprend pas je pense que je dois avoir a rajouter un PATH ou un truc ds le genre mais je sais pas ...

    si quelqu'un pouvait m'aider
    merci

  2. #2
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    Bon je croix comprendre ce qui se passe ...
    le fait est que le .h exporte a partir de la classe .java ne correpond plus lorsque je mets le nom du paquage ...
    mais comme la commande javah ne fonctionne pas si il y a le package
    enfin ca rentre plus ds ce forum

    desole

  3. #3
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    La commande javah ne cherche pas à intégrer le nom du package dans l'entete de ta méthode JNI. Tu dois le faire par toi même. Tu dois l'écrire dans le style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Java_packageName_className_functionName
    RCP rulez!

  4. #4
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    Ok merci ca devait venir de la

    mais j'avoue que j'ai tjrs cette erreur: Exception in thread "main" java.lang.UnsatisfiedLinkError: function name

    lorsque j'execute une des fonction native a partir d'un autre package mais lorsque c du meme aucun probleme d'execution ...
    Donc il n'arrive pas avoir acces a une de mes foncions mais trouve ma librairie ...

    mais je ne pense pas que ma bibliotheque soit mal faite sachant que l'execution est ok ds le meme package

    Qu'est-ce que tu en pense ?

  5. #5
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Si tu appelle ta fonction native d'un autre package, c'est normal que ça ne fonctionne pas. Pour fonctionner, il faudrait que tu aies dans ta librairie 2 fonctions pareilles, mais avec des noms différents. Le nom du package serait la seule différence dans la nomemclature JNI.

    Ce que tu devrai faire, c'est un seul point d'entré dans ton application Java. Une seule classe qui appelle toutes tes méthodes natives. Par la suite, un peu partout dans ton application, tu peux créer un objet de ta classe et appeler les méthodes java.

    Dans le genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    package monTravail;
     
    
     
     
    
    public class JNICall {
    private static JNICall instance; private JNICall(){} publicstatic JNICall getInstance() {
    if (null == instance) { instance = new JNICall(); }
    return instance; } public native void jniStartWindow(); static {
    try{
    //We should load all the dlls related to the project so //we'd be sure that the other dependencies are from windows... System.loadLibrary("MaLibrairieJNI");
    } catch (SecurityException se) {
    System.out.println(
    "Security error");
    } catch (UnsatisfiedLinkError ule) {
    System.out.println(
    "Library (or chain of Librairies) not loaded correctly.");
    }
    }
    }
    Dans l'exmple, j'ai créé une classe Singleton qui m'assure d'avoir le même point d'entrée pour toute mon application. Dans ce cas, je n'ai qu'à créer 1 seule dll (ou .so). Cette classe se charge aussi de loader la librairie en question lors du démarrage de l'application.

    J'espère que ça peut t'aider.
    RCP rulez!

  6. #6
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    Je me suis peut etre mal exprime tout a l'heure ... ma classe JAVA principal se trouve ds le meme package que le reste ... la si je mets un main ds cette classe happyness ... mais lorsque j'appelle les fonctionnalites de cette meme classe .... la ca ne marche plus ....

    mais sinon merci pour le singleton
    tu as une autre idee pour l'histoire de package ... je trouve ca bizzard mais ca fait 5 fois que je refaits tout de 0 et c tjrs pareil

  7. #7
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    Post ton code. Les 2 manières (avec le main et sans main) pêut-être qu'on va pouvoir voir un problème. Et post aussi l'entête de ton JNI C++ (l'intérieur de la fonction n'a pas vraiment d'importance).
    RCP rulez!

  8. #8
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    Hey merci pour tout \

    voici le .Java (j'ai pas encore ajouter le singleton mais c pas ca qui gene ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    package org.mbari.aved.jni;
     
    public class Essai {
     
        static { System.loadLibrary("Essai"); }
     
        public static native void collectClass();
        public static native void initializeAVEDClassifierLibrary();
        public static native void terminateAVEDClassifierLibrary();    
     
        public static void main    (String args[]) {
            Essai.initializeAVEDClassifierLibrary();
            System.out.print("Collect class execution ... ");
            Essai.collectClass();
            Essai.terminateAVEDClassifierLibrary();
        }    
    }

    l'entete .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class org_mbari_aved_jni_Essai */
     
    #ifndef _Included_org_mbari_aved_jni_Essai
    #define _Included_org_mbari_aved_jni_Essai
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     org_mbari_aved_jni_Essai
     * Method:    collectClass
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_org_mbari_aved_jni_Essai_collectClass
      (JNIEnv *, jclass);
     
    /*
     * Class:     org_mbari_aved_jni_Essai
     * Method:    initializeAVEDClassifierLibrary
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_org_mbari_aved_jni_Essai_initializeAVEDClassifierLibrary
      (JNIEnv *, jclass);
     
    /*
     * Class:     org_mbari_aved_jni_Essai
     * Method:    terminateAVEDClassifierLibrary
     * Signature: ()V
     */
    JNIEXPORT void JNICALL Java_org_mbari_aved_jni_Essai_terminateAVEDClassifierLibrary
      (JNIEnv *, jclass);
     
    #ifdef __cplusplus
    }
    #endif
    #endif

    et le .cpp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    #include "libAVEDClassifierMatlab.h"
    #include "Essai.h"
     
    JNIEXPORT void JNICALL Java_org_mbari_aved_jni_Essai_collectClass
    (JNIEnv *, jclass){
     
      mxArray *db  = mxCreateString("/home/aved/jerome/aved/classifier/matlab/DB/");
      mxArray *img = mxCreateString("/home/aved/achase/test/background-best/PBSbackground");
     
      mlfCollect_class(db,img); 
     
      mxDestroyArray(db);
      mxDestroyArray(img);
     
    }
     
    JNIEXPORT void JNICALL Java_org_mbari_aved_jni_Essai_initializeAVEDClassifierLibrary
    (JNIEnv *, jclass)
    {
      mclInitializeApplication(NULL,0);
      libAVEDClassifierMatlabInitialize();
    }
     
    JNIEXPORT void JNICALL Java_org_mbari_aved_jni_Essai_terminateAVEDClassifierLibrary
    (JNIEnv *, jclass)
    {
      libAVEDClassifierMatlabTerminate();
      mclTerminateApplication();
    }

    voili et merci encore

  9. #9
    Membre averti Avatar de Jean-Philippe Shields
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    278
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2005
    Messages : 278
    Points : 340
    Points
    340
    Par défaut
    J'ai fait un test rapide parce que je ne voyais pas de problèmes à première vue. Mon test est cependant concluant. C'est à dire que ton code fonctionne bien dans la version que tu m'as donné (ça tu le savais déjà), mais aussi en appelant la classe depuis un autre main().

    Voici ce que j'ai codé rapidement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    
    package org.mbari.aved.jni;
     
    public class Essai {
     
     
    
    
    static { System.loadLibrary("Essai"); } public static native void collectClass(); public static native void initializeAVEDClassifierLibrary(); public static native void terminateAVEDClassifierLibrary();
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    package org.mbari.aved.jni;
    
     
    public class MainClass {
     
     
    
    
    /** *@paramargs */ public static void main(String[] args) {
    Essai.collectClass(); Essai.initializeAVEDClassifierLibrary(); Essai.terminateAVEDClassifierLibrary();
    }
    }
    Je n'ai rien changé dans le code de ma dll. As-tu bien placé la dll à la racine de ton projet Java? C'est-à-dire au même endroit que les fichiers .classpath et .projet. Sérieux je vois rien d'autre...
    RCP rulez!

  10. #10
    Membre habitué
    Profil pro
    Étudiant
    Inscrit en
    Avril 2005
    Messages
    258
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2005
    Messages : 258
    Points : 165
    Points
    165
    Par défaut
    ok ca marche maintenant ... mais alors j'ai rien touche je comprends pas ...
    est-ce que ca peut venir d'une JRE un peu malade ? va savoir

    merci quant meme pour tout

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/10/2008, 13h07
  2. Erreur de PATH dans ECLIPSE ?
    Par a028762 dans le forum Eclipse PHP
    Réponses: 2
    Dernier message: 10/01/2008, 21h45
  3. probleme de class path avec eclipse
    Par geraldine34 dans le forum Eclipse Java
    Réponses: 11
    Dernier message: 04/06/2007, 09h25
  4. build path sous Eclipse Maven
    Par babalastar dans le forum Maven
    Réponses: 1
    Dernier message: 11/01/2007, 09h51
  5. [Débutant] Problème de Build Path dans Eclipse
    Par Invité dans le forum Eclipse Java
    Réponses: 15
    Dernier message: 13/11/2005, 18h03

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