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

Langage Java Discussion :

Utiliser une librairie dynamique dans NetBeans


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut Utiliser une librairie dynamique dans NetBeans
    Bonjour, à tous,

    J'ai un petit problème avec NetBeans et l'utilisation de swig.

    J'utilise swig pour créer une bibliothèque dynamique « libexample.so » qui appelle des méthodes écrites en C.

    J'ai fait le petit exemple fournit par swig. Voici le code de la classe Main

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Main {
       public static void main(String argv[]) {
         System.loadLibrary("example");
         System.out.println(example.getMy_variable());
         System.out.println(example.fact(5));
         System.out.println(example.get_time());
       }
    }
    Si je le compile depuis la console linux avec la commande :
    javac Main.java La compilation se passe sans problème.

    Puis je lance mon appli sans problème avec la commande :
    java -Djava.library.path=/home/beatom/Sebastien/SWIG/ Main

    Par contre si j'utilise le même code dans NetBeans. NetBeans me retourne une erreur pour les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
         System.out.println(example.getMy_variable());
         System.out.println(example.fact(5));
         System.out.println(example.get_time());
    Le message d'erreur est "cannot find symbole symbole : variable example", "cannot find symbole symbole : method getMy_variable()" etc ...

    Je comprend l'erreur mais je ne sais pas pourquoi NetBeans me l'affiche, car le code fonctionne en dehors de NetBeans.

    Si je commente ces lignes la classe Main est bien compilée et exécutée par NetBeans donc j'en déduis que ma librairie est bien chargée.

    Je voudrais donc savoir s'il est possible de forcer la compilation dans NetBeans ou s'il faut déclarer le chemin de la librairie *.so dans les propriétés du projet.

    Merci d'avance pour vos réponses.
    Cordialement Sébastien.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par mango54 Voir le message
    Si je le compile depuis la console linux avec la commande :
    javac Main.java La compilation se passe sans problème.
    Perso je comprend tout à fait NetBeans : je ne vois pas la déclaration de la variable example dans le code que tu nous montres...

    a++

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    Perso je comprend tout à fait NetBeans : je ne vois pas la déclaration de la variable example dans le code que tu nous montres...

    a++
    Merci pour ta réponse,

    Je suis d'accord avec toi, mais il n'est pas possible de contourner le problème car hors de NetBeans ce petit bout de code fonctionne.

    Je vais faire un nouveau test je suis peut être sur une mauvaise piste.

    A+

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mango54 Voir le message
    Je suis d'accord avec toi, mais il n'est pas possible de contourner le problème car hors de NetBeans ce petit bout de code fonctionne.
    Ce petit bout de code ne peut pas fonctionner, même en dehors de NetBeans :

    • soit le code que tu nous montre est incomplet
    • Soit tu te trompes de fichier



    a++

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Donc effectivement je suis un peu boulet sur ce coup la, car swig génère deux classes example.java et exampleJNI.java qui sont très utile à la classe Main.java.

    Par contre j’ai un nouveau problème à l’exécution j’ai l’erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Exception in thread "main" java.lang.UnsatisfiedLinkError: swig.exampleJNI.My_variable_get()D
            at swig.exampleJNI.My_variable_get(Native Method)
            at swig.example.getMy_variable(example.java:16)
            at swig.Main.main(Main.java:20)
    Java Result: 1
    A+ Séb

  6. #6
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Je viens de relire une partie de la doc de swig.
    Apparemment il faut que je re-génère les deux classes example.java et exampleJNI.java en incluant mon package avec la commande :

    swig -java -package mon.package example.i

    Je vais faire le test

    A+ Séb

  7. #7
    Membre à l'essai
    Inscrit en
    Octobre 2003
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2003
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    Voila le petit programme fonctionne il fallait juste inclure le package à la création des classes et générer à nouveau la bibliothèque dynamique.

    Je vais enfin commencer le vrai projet.

    Merci pour ton aide adiGuba, car je partais sur une mauvaise piste.

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

Discussions similaires

  1. Créer une librairie dynamique avec NetBeans C/C++
    Par Grammato dans le forum NetBeans
    Réponses: 2
    Dernier message: 12/04/2011, 11h38
  2. Utilisation d'une librairie dynamique C++ dans un script python
    Par johnraikonen dans le forum Interfaçage autre langage
    Réponses: 6
    Dernier message: 27/01/2011, 15h48
  3. [COM] utiliser la librairie standard dans une dll COM
    Par kacedda dans le forum Visual C++
    Réponses: 5
    Dernier message: 13/03/2008, 14h57
  4. Réponses: 3
    Dernier message: 18/09/2007, 14h54
  5. Réponses: 2
    Dernier message: 06/04/2006, 17h44

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