JNA實現Java調用Fortran(f77)
在成功實現Java調用C++之后,接下來想到能否通過JNA實現Java調用Fortran,今天試驗了一下,還是比較容易的。網上有一個Java調用F95的例子,但是我考慮不僅要實現F95的調用,還要實現F77的調用,所以費了一些周折。
問題的關鍵在于F77為過程名自動添加了一個尾部的下劃線,所以sub1這個過程,到Java一端,就變成了sub1_,知道了這一點,后面就簡單了。
1、創建一個動態鏈接庫項目FortranDLL,新建一個簡單的fortran源程序for1.f:
subroutine sub1(i)
INTEGER i;
PRINT*, "SUB1 CALLED"
PRINT*, i
END subroutine
編譯代碼生成libFortranDLL.dll。
2、新建一個Java項目,包含JNA庫
創建一個動態庫接口代碼FLib.java:






創建一個主程序Main.java













注意,關鍵在于接口當中的sub_這個命名規則,否則無法找到找到指定過程,另外默認情況下,fortran使用引用參數,所以不能簡單實用int作為參數,必須實用引用參數。
運行程序,得到如下結果:
run:
SUB1 CALLED
1234
成功生成(總時間:1 秒)
3、G95的調用更簡單一些,可以直接使用bind指定輸出過程(函數)名,可以完全不必考慮編譯器的命名規則,比f77的方式可移植性更好一些。
可以參考這里:http://www.javaforge.com/wiki/66061
posted @ 2010-05-12 22:05 大熊 閱讀(3090) | 評論 (0) | 編輯 收藏