无法使用JNA读取文件中的十进制数

时间:2014-08-01 12:48:10

标签: java fortran jna gfortran

我需要帮助才能使用JNA读取文本文件中的十进制数字。它看起来很有趣,但问题是真的。

我创建了一个简单的Java程序,它使用JNA调用一个简单的Fortran子程序。

主要课程:

package Appli;

public class Appli {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {

        // call to subroutine lecture with LECT 
        LectInterface.LECT.lecture();

    }
}

界面:

package Appli;

import com.sun.jna.Library;
import com.sun.jna.Native;

/**
 * Interface.
 */
public interface LectInterface extends Library {

    // dynamic library.
    public final static LectInterface LECT = (LectInterface) Native.loadLibrary("libLect.so", LectInterface.class);

    /**
     * Fonction LECTURE.
     *
     */
    public double lecture();
}

Fortran子程序只读取文本文件中的数字:

SUBROUTINE LECTURE ()
      DOUBLE PRECISION VALDOUBLE

      INTEGER IFILE
      PARAMETER(IFILE=1)

      WRITE(*,*)'START LECTURE'

      OPEN(UNIT=1,FILE='/home/Fortran/fort.txt')
      READ(IFILE,*) VALDOUBLE
      WRITE(*,*)VALDOUBLE

      WRITE(*,*)'END LECTURE'
END SUBROUTINE

文本文件:

2.36

当我使用我的Java程序(使用NetBeans)调用此子例程时,它返回:

run :
 START LECTURE
     2.000000000000000
 END LECTURE

我使用NetBeans 8,java 7,gfortran和JNA-4.1.0

我编译:

gfortran -fno-underscoring -fPIC -c -g -o LECTURE.o LECTURE.f

然后

gfortran -shared -o libLect.so LECTURE.o

我无法解释为什么READ函数只占用数字的前半部分(小数点前),例如:

2.200          =>  2.000000000000000
0.12           =>  0.000000000000000
12.023         =>  12.000000000000000
100000.0182    =>  100000.000000000000000

我使用编译器ifort(英特尔)和pgf90(PGI)进行了几次测试。

使用pgf90,结果仍为false,但使用ifort时,可以正确读取该值。

编译:{{1​​}}

创建动态库:ifort -c -fPIC LECTURE.f

结果:2.3

我还使用与ifort相同的选项使用gfortran编译源代码。值为false(2.0)。

是否有使用gfortran添加的编译选项?

0 个答案:

没有答案