我正在使用gfortran的95+擴展。我有一個實用程序模塊庫,我想鏈接到其他項目,即作爲庫或共享對象/ DLL。但是,在Fortran中,我不明白如何將接口從Fortran實現中分離出來,而不需要維護模塊接口的兩個副本。如何爲Fortran 95+模塊庫提供顯式接口,並隱藏實現
在C中,我將接口從象實現分離:
api.h ←includes← impl.h
↑ ↑
includes includes
↑ ↑
user.c impl.c
有沒有辦法實現現代化的Fortran語言相同的效果?我是否需要爲用戶提供.mod文件的庫?
- 顯式接口
- 只有接口定義暴露給用戶代碼的單一定義
編輯:綜上所述(我認爲是)答案:
.mod文件是需要的,因爲它們包含顯式接口定義
沒有標準的Fortran ABI的模塊 - .mod文件將是編譯器特定的
唯一直接analgous的方法來實現隱藏的問題是子模塊,這是在2008年的Fortran定義,並gfortran不支持。
@ High-Performance-Mark和Fedora頁面提到的避免模塊的最實用方法是爲接口模塊分發包含文件以及用於實現的預編譯.mods。
使用包含有一些衆所周知的令人討厭的旅程,包括潛在的重新定義通用塊。
我有點驚訝,這裏並沒有一個直截了當的答案。