关于java调用fortran dll的坑

项目里面需要用java调用fortran 的dll,我负责生成dll,对方工程师负责java调用。以为很简单的分工,很快能完成。没想到遇到很多坑!!!

材料:VS2010, Intel(R) Visual Fotran Compiler 16.0 编译器     myeclipse version 8.5   ,  jdk 1.6.0(32位),JNA库

ap8ae8.for 源代码   ,  java调用接口代码FLib.java,  主函数代码Main.java

步骤:

(1)VS上新建项目,选择Intel(R) Visual Fortran 的Library 下Dynamic-link Library,随便输入工程名字

(2)source添加ap8ae8.for代码,编译生成dll

 (3)java 里面调用该dll

接下来输出“hello",显示调用成功

我把编译好的dll发送给对方,对方拿到dll后在自己电脑上死活不能成功运行。总提示

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'D:\ap8ae8.dll': Native library (win32-x86/D:\ap8ae8.dll) not found in resource path ([file:/D:/Project/eclipse/apaetest/bin/, file:/D:/jna-4.0.0.jar, file:/D:/jna-platform-4.0.0.jar])
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:271)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:398)
    at com.sun.jna.Library$Handler.(Library.java:147)
    at com.sun.jna.Native.loadLibrary(Native.java:412)
    at com.sun.jna.Native.loadLibrary(Native.java:391)
    at Main.main(Main.java:11)
各种折腾,反正就是我的电脑能运行,对方的电脑不能运行。

后来发现错误来自两点:

一是对方的jdk是64位的,我编译的是32位的dll;

二是即使是我的电脑编译好的64位的dl,对方也不能运行,因为编译时候依赖于电脑本身的环境,需要一些其他依赖库支持!

不同电脑编译出的Fortran dll不能交叉运行!!!!除非修改编译时依赖库的设置,编译器都有默认依赖设置,可以通过工程属性的fortran 下面Runtime library   修改libaray.

下一篇文章里面我会介绍修改dll依赖库方法

你可能感兴趣的:(Fortran,java)