Partage
  • Partager sur Facebook
  • Partager sur Twitter

JNA : où placer ma librairie ?

Sous Linux et/ou Mac os x

    25 septembre 2011 à 21:54:18

    Bonjour !

    Je fais actuellement mes tout premiers pas (en réalité je me tiens encore aux meubles) avec JNA (Java Native Access). Je travaille avec Eclipse sous Mac Os X.

    J'ai constitué une librairie nommée libSqrt.dylib (voir détails plus bas) que j'essaye d'appeler avec JNA, mais je n'y parviens pas car je ne sais pas où doit se situer cette librairie et/ou comment informer Eclipse qu'elle existe.

    J'espère que l'un d'entre vous pourra m'aider. :)



    Pour les experts, voici les détails de ce que j'ai déjà fait, car d'autres erreurs s'y trouvent peut-être également.

    Fichier sqrt.h
    extern double cppsqrt(double x);
    


    Fichier sqrt.cpp
    #include "sqrt.h"
    #include <cmath>
    
    double cppsqrt(double x)
    {
      return std::sqrt(x);
    }
    


    Compilation de ma librairie:
    g++ -c -Wall -fPIC -O2 -shared sqrt.cpp -o libSqrt.dylib
    


    Interface Java pour utiliser ma librairie:
    package testjna;
    
    import com.sun.jna.Library;
    
    public interface TestJNA extends Library
    {
      double cppsqrt(double x);
    }
    


    Utilisation:
    package testjna;
    
    import com.sun.jna.Native;
    
    public class SqrtCalculator
    {
      public static double calculate(double x)
      {
        TestJNA demo = (TestJNA)Native.loadLibrary("Sqrt", TestJNA.class);
        double sqrt = 0.0;
        sqrt = demo.cppsqrt(x);
        return sqrt;
      }
    }
    


    Main:
    package testjna;
    
    public class MainClass
    {
      public static void main(String[] args)
      {
        System.out.println(SqrtCalculator.calculate(3.1415926));
      }
    }
    



    Merci d'avance,
    Caduchon.
    • Partager sur Facebook
    • Partager sur Twitter
    Je ne suis responsable que de ce que je dis, pas de ce que vous comprenez... - /!\ Négligences de sécurité sur OpenClassrooms /!\
      26 septembre 2011 à 10:22:50

      Salut,

      A priori tu t'y es bien pris. Quelles sont les erreurs remontées par Eclipse ?
      Est-ce que tu as bien ajouté le jar de JNA à ton projet sous Eclipse ?
      • Partager sur Facebook
      • Partager sur Twitter
        26 septembre 2011 à 10:35:12

        Côté Eclipse, tout compile sans problème. J'ai bien ajouté les .jar.
        J'ai testé au boulot sous Linux (puisque c'est la finalité en fait), et là ça fonctionne avec un .so.
        J'ai du redéfinir mon LD_LIBRARY_PATH dans l'environnement de debug et ça semble fonctionner. Je vais maintenant tester avec des fonctions un peu plus évoluées (entre autre avec échange de strings).

        EDIT: à noter également: dans ma version actuelle j'ai ajouté un extern "C" devant ma fonction placée dans la librairie.
        • Partager sur Facebook
        • Partager sur Twitter
        Je ne suis responsable que de ce que je dis, pas de ce que vous comprenez... - /!\ Négligences de sécurité sur OpenClassrooms /!\

        JNA : où placer ma librairie ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown