私はgfortranの95以上の拡張機能を使用しています。他のプロジェクトにリンクしたいユーティリティモジュールのライブラリがあります。つまり、ライブラリまたは共有オブジェクト/dllとしてです。ただし、Fortranでは、モジュールインターフェイスの2つのコピーを維持せずに、Fortranの実装からインターフェイスを分割する方法がわかりません。
Cでは、次のようにインターフェイスを実装から分離します。
api.h ←includes← impl.h
↑ ↑
includes includes
↑ ↑
user.c impl.c
最新のFortranで同じ効果を達成する方法はありますか?ライブラリに.modファイルをユーザーに提供する必要がありますか?
- 明示的なインターフェースの単一の定義
- インターフェイス定義のみがユーザーコードに公開されます
編集:(私が思うに)答えを要約すると:
明示的なインターフェイス定義が含まれているため、.modファイルが必要です
モジュール用の標準のFortranABIはありません-.modファイルはコンパイラ固有になります
実装を隠す問題への唯一の直接的な類似のアプローチは、Fortran 2008で定義され、gfortranがサポートしていないサブモジュールです。
@ High-Performance-MarkとFedoraページで示されているように、モジュールを回避する以外の最も実用的なアプローチは、実装用にプリコンパイルされた.modとともに、インターフェイスのみのモジュールのインクルードファイルを配布することです。
インクルードを使用すると、一般的なブロックの再定義の可能性など、よく知られた厄介なトリップアップが発生します。
ここに実際に簡単な答えがないことに少し驚いています。