Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink

Status des Themas:
Es sind keine weiteren Antworten möglich.

Diskutiere Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink im Allgemeine Java-Themen Forum; Hallo! Ich versuche unter Linux eine einfache Fortran Funktion in Java aufzurufen. Ich verwende dazu JNI und eine C-Funktion als Wrapper. Auf...

  1. Sonjaja
    Sonjaja Neues Mitglied
    Hallo!
    Ich versuche unter Linux eine einfache Fortran Funktion in Java aufzurufen. Ich verwende dazu JNI und eine C-Funktion als Wrapper. Auf Windows läuft das Programm, aber auf Linux bekomme ich folgende Fehlermeldung:

    Code (Text):
    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)
    Das Fortran Programm sieht folgendermaßen aus:

    Code (Text):
    SUBROUTINE essai()

        write(*,*) "coucou en Fortran"

        return
       
        END SUBROUTINE essai
     
    Das Java Programm wie folgt:

    Code (Text):
    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");
        }
       
    }
    und das C-Programm so:

    Code (Text):
    #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;
    }

    Zum kompilieren und executieren habe ich folgende Befehle verwendet:

    Code (Text):
    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
    Unter Windows habe ich noch ein .def File verwendet, aber das wird in Linux eigentlich nicht benötigt. Ich habe schon alles im Netz abgesucht, aber nicht wirklich was gefunden. Ich glaube allerdings, dass es irgendwie mit dem Kompiler zusammenhängen muss. Es wäre super wenn mir einer von Euch weiterhelfen könnte!
    Sonja
     
  2. Vielleicht hilft dir dieser Java-Kurs hier weiter --> (hier klicken)
  3. Osix2000
    Osix2000 Guest
    Warum mußt Du eigentlich den Umweg über C gehen ?

    Kann man nicht den FortranCode gleich mit Java über JNI ausführen ?

    Wer weiß dazu was ?
     
  4. thE_29
    thE_29 Neues Mitglied
Die Seite wird geladen...

Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink - Ähnliche Themen

JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C
JNA:Zugriff auf Common-Block von Fortran bzw. Struct in C im Forum Allgemeine Java-Themen
Kommunikation Fortran <-> Java auf Client-Server-Archi
Kommunikation Fortran <-> Java auf Client-Server-Archi im Forum Netzwerkprogrammierung
fortran exe über java ausführen
fortran exe über java ausführen im Forum Allgemeine Java-Themen
ArrayList Rückgabewerte aus einer Funktion
ArrayList Rückgabewerte aus einer Funktion im Forum Allgemeine Java-Themen
Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt?
Gibt es in der JAVA-API eine Funktion, die eine Dezimalzahl in eine binäre Zahl umwandelt? im Forum Java Basics - Anfänger-Themen
Status des Themas:
Es sind keine weiteren Antworten möglich.
Thema: Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink