I have a problem integrating Fortran code with Java JNI. The problem probably occurs when I bind a C object to a Fortran object.
File: HelloWorld.java
public class HelloWorld {
native void foo();
static {
System.loadLibrary("test");
}
static public void main(String argv[]) {
new HelloWorld().foo();
}
}
File: ctest.c
#include <jni.h>
#include <stdio.h>
extern void bar_();
JNIEXPORT void JNICALL Java_HelloWorld_foo
(JNIEnv * env, jobject jobj)
{
printf("Hello World!\n");
}
Compilation:
$ gcc -fPIC -shared -lc \
-I/usr/lib/jvm/java-7-oracle/include \
-I/usr/lib/jvm/java-7-oracle/include/linux \
-o libtest.so ctest.c
$ javac HelloWorld.java
$ java HelloWorld
Hello World!
Great, it Hello World!works correctly. But when I add Fortran code, Java throws an exception.
File: ftest.f95
subroutine bar()
return
end
Compilation:
$ gcc -fPIC -shared -lc \
-I/usr/lib/jvm/java-7-oracle/include \
-I/usr/lib/jvm/java-7-oracle/include/linux \
-o ctest.o ctest.c
$ gfortran -c ftest.f95
$ gcc -shared ftest.o ctest.o -o libtest.so
$ javac HelloWorld.java
$ java HelloWorld
Exception in thread "main" java.lang.UnsatisfiedLinkError: HelloWorld.foo()V
at HelloWorld.foo(Native Method)
at HelloWorld.main(HelloWorld.java:7)
What am I doing wrong?
source
share