Java-Forum.org  

Zurück   Java-Forum.org > Java - Programmierung > Allgemeine Java-Themen

Allgemeine Java-Themen: Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink

Allgemeine Themen, die nicht in andere Fachforen und nicht zu den Java Basics passen

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 26.04.2007, 09:25   #1
Sonjaja
 
Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink - Standard Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink

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:
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:
SUBROUTINE essai()

	write(*,*) "coucou en Fortran"

	return
	
	END SUBROUTINE essai
Das Java Programm wie folgt:

Code:
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:
#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:
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
 

 
Anzeige
 

AW: Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink



 
Alt 08.11.2007, 10:19   #2
 
Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink - Standard AW: Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink

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 ?
 
Alt 08.11.2007, 10:22   #3
thE_29
 
Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink - Standard AW: Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink

Maybe hat deine so was!

Probiers mal so:
http://ringlord.com/publications/jni-howto/ Der hat beim shared diese lg2c Paramete rnicht..
 
Thema geschlossen    

Zurück   Java-Forum.org > Java - Programmierung > Allgemeine Java-Themen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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

Internet-Javascript-Funktion per Java-Programm aufrufen
Internet-Javascript-Funktion per Java-Programm aufrufen: Hallo zusammen, ich schreibe zur Zeit ein Programm, mit dem ich verschiedene Dinge einer Homepage auslese. Wenn ein bestimmter Zustand eintritt, möchte ich eine Javascript-Funktion dieser Homepage...
Aus Java eine Javascript Funktion aufrufen
Aus Java eine Javascript Funktion aufrufen: Hallo, ich bin gerade am Umsteigen aus der .Net Welt nach Java &Co. . Ich habe ein kleines Problem wo ich nicht so richtig weiter weiß. Evtl. kann mir ja einer von euch helfen: Ich habe eine...
Fortran nach Java mit f2j
Fortran nach Java mit f2j: Hallo, hat irgendjemand schon mal den Konverter f2j benutzt um Fortran-Code nach Java zu übersetzen und kann mir sagen, wie das geht? Gruß, Wintzrock
java funktion in JSP file aufrufen.
java funktion in JSP file aufrufen.: hallo, ich habe ein JSP file, messenger.jsp. dort kann man den userStatus ändern mit einem <Select><option>... nun, wenn ich den status ändere, z.b. von online zu offline, will ich die java...
C# Funktion in Java aufrufen
C# Funktion in Java aufrufen: bin auf der Suche nach einer Möglichkeit aus einem Java Programm eine C# Funktion (kann auch ein Programm sein) aufzurufen. Bisher habe ich nur mit JNI und C++ das zusammengebracht. Bei C# kann ich...




Sie betrachten gerade Fortran Funktion mit JNI aufrufen: java.lang.UnsatisfiedLink