問題タブ [fortran-iso-c-binding]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Fortran で C 関数を呼び出し、uint32_t 引数を適切に渡す方法
こんにちは、Fortran 90 コードを使用して C 関数を呼び出しています。アドレスを操作しているので、C 関数の引数は Fortran で適切に一致する必要があります。コードをコンパイルするために ifort と icc を使用し、64 ビット マシンで作業しています。
いくつかのテストでは、これが で動作することが示されましたがint32_t
、最終的な落とし穴を防ぐために、uint32_t
私が呼び出しているC関数には、次のプロトタイプがあります
次のようなことをするだけでは、これらの関数を呼び出すことはできません
これにより、意味不明なことが発生します。したがって、私は回避策を使用しています:
続いて Fortran で
明らかに、引数の型の不一致に問題があります。残念ながら、これを修正する方法がわかりません。私のデコード/エンコード関数ではバイナリ アドレス演算が行われるため、uint32_t
.
c++ - Fortran 77 での C++ クラス オブジェクトの使用
Fortran 77 で使用する C++ オブジェクトを渡す方法はありますか? 例えば:
次に、myshape を C++ オブジェクトとして使用します。このオブジェクトは、Fortran によって使用されるメモリに保持され、実際に使用する他の C++ 関数に渡すだけですか?
編集: C++ コードは次のとおりです。
c++ - C++ と FORTRAN (mpif90) を iso_c_binding で結合するための cmake の使用
iso_c_binding を使用して C++ 関数を呼び出す単純な FORTRAN プログラムを結合するための CMakeLists.txt を作成しようとしています。gfortran を FORTRAN コンパイラとして使用すると、コードは完全に機能しますが、gfortran の代わりに openMPI (mpif90) に切り替えると、次のエラーが発生します。
gfortran バージョン (動作中) を添付しています。mpif90 に切り替えるには、main.f90 のコメント行のコメントを外します。
func.c:
CMakeLists.txt:
この問題について何か助けていただければ幸いです。
c++ - Visual Studio 2010 で Fortran と C++ を混在させるには?
Fortran メイン プログラムから c++ 関数を呼び出そうとしています。それを行うには、Visual Studio 2010 で次の手順に従いました。 C++ スタティック ライブラリ プロジェクトを作成するには
- メニュー バーで、[ファイル]、[新規]、[プロジェクト] の順に選択します。
- [新しいプロジェクト] ダイアログ ボックスの左側のウィンドウで、[インストール済み]、[テンプレート]、[Visual C++] の順に展開し、[Win32] を選択します。
- 中央のウィンドウで、[Win32 コンソール アプリケーション] を選択します。
- [名前] ボックスにプロジェクトの名前 (MathFuncsLib など) を指定します。[ソリューション名] ボックスに、ソリューションの名前 (StaticLibrary など) を指定します。[OK] ボタンを選択します。
- [Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、[次へ] をクリックします。
- [アプリケーションの設定] ページの [アプリケーションの種類] で、[静的ライブラリ] を選択します。
- [アプリケーションの設定] ページの [追加オプション] で、[プリコンパイル済みヘッダー] チェック ボックスをオフにします。
- [完了] ボタンを選択して、プロジェクトを作成します。
実行可能な Fortran プロジェクトを作成するには
- メニュー バーで、[ファイル]、[新規]、[プロジェクト] の順に選択します。
- [新規プロジェクト] ダイアログ ボックスの左ペインで、[インストール済み]、[テンプレート]、[インテル(R) Visual Fortran] の順に展開し、[コンソール アプリケーション] を選択します。
- 中央のペインで、[空のプロジェクト] を選択します。
- プロジェクトの名前を指定してから、ソリューションの名前を指定します。ソリューション ボックスで、[ソリューションに追加] を選択します。[OK] ボタンを選択します。
さらに、以下のように Visual Studio でいくつかの設定を行います。
- 実行可能な Fortran プロジェクトを右クリックし、[依存関係] を選択して、実行可能プロジェクトをスタティック ライブラリ プロジェクトに依存するように設定します。
- 実行可能プロジェクトを右クリックし、[スタートアップ プロジェクトとして設定] を選択して、ビルドしてデバッグできるようにします。以下の Fortran メイン プログラムと C++ 関数があります。
Fortran プログラム
C++ 関数
プログラムをビルドすると、次のエラーに直面します。
誰でも私を助けることができますか?どんな提案でも大歓迎です。
c - fortran から C を呼び出す (ifort、gfortran)
私は、C 関数への単一の呼び出しを追加して、巨大な Fortran 2003 プログラムを更新する必要がある C プログラマーです。
最初に、ループ カウンター (および可能であれば日付/時刻) を含む文字列を使用して C 関数を内部から正しく呼び出す最小限の Fortran ラッパー (最新の自由形式の Fortran では、シャウトなし) を作成する必要があります。ループ。
これは「簡単」なはずですが、私が行った検索では、動作するプログラムを作成するのに十分なスニペットが得られませんでした。
最近の 64 ビット バージョンの gfortran と Intel ifort コンパイラを 64 ビット Linux で使用していますが、テスト コードは両方のコンパイラを使用してコンパイルする必要があります。
ファイル send_to_port.c の C 定義は次のとおりです。
最後のパラメーターは、Fortran が末尾の null を気にする必要がないようにするために追加されました (私は C で処理します: data[length] = '\0';)。長さパラメーターは Fortran によって「自動的に」追加されることを理解しているため、Fortran 呼び出しには、整数のポート番号と送信する文字列の 2 つのパラメーターしかありません。
次の gfortran 行と同等の ifort を使用してコードをコンパイルしたいと考えています。
最小限のコードを探しています。約 10 ~ 20 行である必要があると考えていますが、Fortran についてはわかりません。test.f の現在の編集バッファーは次のとおりです (コンパイルされません)。
ヘルプ?