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 :

Appel Fortran de Java: java.lang.UnsatisfiedLinkError


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 6
    Par défaut Appel Fortran de Java: java.lang.UnsatisfiedLinkError
    Salut!
    J'essaie d'appeler une fonction fortran tout simple à partir du Java en utilisant du JNI et un wrapper de C. Sous Windows cela marche, mais pas sous Linux, et je ne comprends vraiment pas pourqoi. J'estime que c'est un problème du compilateur,...
    Le message d'erreur est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/alban/lib/libessf.so: /home/alban/lib/libessf.so: undefined symbol: _gfortran_filename
           at java.lang.ClassLoader$NativeLibrary.load(Native Method)
           at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1751)
           at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1676)
           at java.lang.Runtime.loadLibrary0(Runtime.java:822)
           at java.lang.System.loadLibrary(System.java:992)
           at LoadLib.<clinit>(LoadLib.java:24)
    Le programme Fortran est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SUBROUTINE essai()
     
    	write(*,*) "coucou en Fortran"
     
    	return
     
    	END SUBROUTINE essai
    Le programme Java est:

    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
    import java.io.*;
    public class LoadLib {
     
        /** Creates a new instance of WRubar20 */
        //public LoadLib() { }
     
     
        public static native void f1();
     
        static {System.loadLibrary("essf"); }
     
        public static void main (String args [ ])
        {
            System.out.println("aller, je commence en Java\n");
            new LoadLib().f1();
            System.out.println("ca y est, j'ai fini en Java\n");
        }
     
    }
    et le programme C:

    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
    #include<stdio.h>
    #include<jni.h>
    #include"LoadLib.h"
     
     
    extern void essai_();
     
     
    JNIEXPORT void JNICALL Java_LoadLib_f1  (JNIEnv * env, jclass cl)
    {
    printf("coucou en C\n");
     
    essai_();
     
    return;
    }

    Pour compiler et éxécuter j'ai utilisé les commandes suivantes:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    javac LoadLib.java
    javah -jni LoadLib
    gcc -c sub.f
    JNI=/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/include
    JNI_LINUX=/usr/lib/jvm/java-1.5.0-sun-1.5.0.06/include/linux
    gcc -c  -I$JNI -I$JNI_LINUX LoadLib.c
    gcc -o libessf.so -shared -I$JNI -I$JNI_LINUX sub.o LoadLib.o -lg2c
    java LoadLib
    Sous Windows j'ai utilisé encore un fichier .def, mais normalement sous Linux, on n'en a pas besoin.
    J'ai regardé partout, mais je suis arrivée à mes limites, si quelqu'un a un clou, je serais super contente.
    Merci en avance,
    Sonja

  2. #2
    Membre éprouvé Avatar de nicgando
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    128
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2006
    Messages : 128
    Par défaut
    Je ne vois pas ou tu as setté le java library path
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -Djava.library.path=<dir_to_lib> ...
    Sous windows tu avais dû mettre ta dll dans un répertoire qui fait parti du path.

    Ou bien il peut arriver que Java essaye de bien loader ta dll mais il ne trouve pas toutes ces dépendances mais bon vu ton code il ne doit pas y avoir de dépendance

Discussions similaires

  1. java.lang.UnsatisfiedLinkError avec JNI
    Par sonjaja dans le forum Entrée/Sortie
    Réponses: 10
    Dernier message: 07/06/2017, 11h12
  2. [JNI] Problème SWIG java.lang.UnsatisfiedLinkError
    Par Julien.M dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 20/09/2007, 16h15
  3. Réponses: 1
    Dernier message: 12/09/2007, 10h47
  4. [System.load] Exception java.lang.UnsatisfiedLinkError avec unknown file type
    Par jemini_fr dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 05/02/2007, 13h52

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