2

C++ コード用の Fortran 77 ラッパーを作成しようとしています。それに関する情報は見つかりませんでした。アイデアは、Fortran 77 プログラムで C++ で書かれた lib の from 関数を使用することです。

誰もそれを行う方法を知っていますか? ありがとう!

4

2 に答える 2

2

ローレンス リバモア国立研究所は、複数の言語で書かれたソフトウェアを単一のまとまりのあるアプリケーションに統合するための、 Babelと呼ばれるツールを開発しました。単純なニーズであれば、おそらく C++ コードに C ラッパーを配置して、Fortran から呼び出すことができます。ただし、より高度なニーズがある場合は、Babelを検討する価値があるかもしれません。

于 2010-07-12T17:19:22.803 に答える
1

C から Fortran を呼び出すのは簡単ですが、Fortran から C を呼び出すのは難しいかもしれません。Fortran から C++ を呼び出すのは難しいかもしれません。

私は他の場所にいくつかのメモを持っています。これらはかなり古いものですが、この種の分野では急速に変化するものは何もないため、まだ有用な指針がいくつかあるかもしれません。

残念ながら、これを行う標準的な方法はなく、コンパイラが異なればわずかに異なる方法で行われる場合もあります。そうは言っても、大きな頭痛の種に遭遇する可能性が高いのは、文字列を渡すときだけです。上記のリソースは、CNFと呼ばれるライブラリを指しています。これは主に、簿記をシュガーする C マクロを提供することによって、ここで役立つことを目的としています。

ただし、短いバージョンは次のとおりです。

  • 浮動小数点数と整数は一般的に簡単です。整数は多かれ少なかれ整数です。
  • 文字列は難しいです (Fortrans はこれらを構造体として格納することが非常に多く、C スタイルのヌル終了配列として格納することはほとんどないため)。
  • C は値による呼び出し、Fortran の参照による呼び出しです。つまり、C の観点からは、Fortran 関数は常に値へのポインターです。
  • コンパイラがシンボルを生成する方法に注意する必要があります。コンパイラは、多くの場合、C/Fortran シンボルfoo_foofoo_その他のバリアントに変換します (コンパイラ ドキュメントを参照)。
  • Cにはランタイムがあまりない傾向があり、C++とFortranにはあります。そのため、リンク時に何らかの方法でそれをリンクすることを忘れないでください。

それはあなたが知る必要があることの大部分です。残りは厄介な詳細であり、コンパイラとリンカのドキュメントと友達になることです。おそらく望んでいたよりも、リンカーについてより多くのことを知ることになります。

于 2010-07-12T16:46:38.780 に答える