問題タブ [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 関数が segfault を引き起こす (C++ からの呼び出し)
基本的に、ここに私の問題があります。自分の C++ コードから他の誰かの FORTRAN 関数を呼び出しているのですが、頭痛の種です。いくつかのコード:
それがFORTRAN関数です。私の最初の質問は、セグメンテーション違反を引き起こすものはありますか?
そうでない場合は、2 番目に: それは何を返しますか? ポインタ?次のCステートメントで呼び出そうとしています:
これにより、セグメンテーション違反が発生します。
それもセグメンテーション違反を引き起こします。
以前に次のコードで c_error_message_() を宣言しました。
実際の戻り値の型とは異なる戻り値の型を持つ関数を宣言すると、segfault が発生しますか?
私は途方に暮れています。返信ありがとうございます。
c++ - Fortran 77 関数を C/C++ に渡す
C/C++へのコールバック関数ポインタとしてfortran 77関数を渡すことは可能ですか? もしそうなら、どのように?
Web で見つけた情報は Fortran 90 以降に関するものですが、私のレガシー コード ベースは 77 です。
どうもありがとう
c++ - Visual StudioでC/C++コードをfortranプログラムから呼び出しますか? (Visual Studio で C と Fortran の混合コードをコンパイルする方法)
C++コードをfortranコードと統合する方法を探しています(fortranコードでいくつかのC/C++関数を呼び出すだけです)。
gcc またはコンソール コンパイラの提案をいくつか見つけましたが、このアプローチを変換してビジュアル スタジオ内の統合問題を解決する方法がわかりません。
現時点では、dll 形式の C++ コードを作成し、Fortran コードから呼び出すことを考えています。
誰かがすでに解決策を見たことがありますか? または、dll から関数を呼び出すためのオーバーヘッドについてはどうですか? 私の fortran コードは大量のメモリを C 関数に転送します。この問題を dll で解決した場合、何か問題はありますか?
どうも。
PS私はVisual Studio 2008 ProfとIntelコンパイラ10を使用しています
PPS私は、私が望むものをより具体的に指定する必要があると思います:私は、いくつかのC関数を使用するビジュアルスタジオでfortranプロジェクトをコンパイルしたいと思います。
c - VisualStudioをIntelFortranと組み合わせて使用し、さまざまなタイプの名前マングリングを使用して解決する方法
fortranとcコードの素敵なメッシュであるプログラムを入手しました。このプログラムをコンパイルするには、ソフトウェアベンダーからプリコンパイルされた一連のライブラリが必要です。これには、特にIntel MKL、MPICH2などが含まれます。Linuxでは、すべてが正常に機能します。しかし、Windowsでは私は立ち往生しています:
コマンドラインを使用すると、次の2つの方法でifortを使用してプログラムをコンパイルできます。
[ A ] ifort / Qlowercase / assert:underscore .......
[ B ] ifort / Quppercase / assert:nounderscore...。 ...。
オプションAを使用することにした場合、一部の外部ライブラリは大文字のnounderscoreを使用してコンパイルされ、これらのシンボルを解決できないため、一連の欠落したシンボルが表示されます。同様に、オプションBを使用すると、他の外部ライブラリはアンダースコア付きの小文字を使用してコンパイルされるため、文句を言います。
リンク状態中にシンボル/関数を再マップする方法はありますか?代替手段はありますか?
python - Python で共有 Fortran ライブラリから関数を呼び出す
Python で Fortran 共有ライブラリからいくつかの関数を呼び出したいと思います。私はネット上でいくつかのリンクを見つけて読んだ。
共有オブジェクトをロードします。ただし、この共有オブジェクトには、別の共有ライブラリのシンボルが含まれています。cdll のヘルプを読みましたが、複数の共有オブジェクト ファイルを同時にロードすることはできないようです。インテル® Fortran コンパイラーによってコンパイルされている可能性が最も高いこの Fortran ライブラリーから関数を呼び出すにはどうすればよいですか?
fortran - Fortranでスリープ
誰かがFortranで与えられたミリ秒数の間眠る方法を知っていますか?移植性のないシステムコールは使いたくないので、FortranまたはCライブラリに固有のものが優先されます。
memory - 負の配列のインデックス付けとメモリ内での配置 (ポインティング)
Fortran では、適切な (整数) 範囲で配列を宣言できます。次に例を示します。
Fortran は、参照渡しの場合、常に array(1) を参照として渡すと思いますが、よくわかりません。
私は fortran ポインターを使用していますが、fortran は配列 (-10) ではなく、「最初の」要素アドレス、つまり配列 (1) を指していると思います。しかし、よくわかりません。
Fortran はメモリ内の負の配列インデックスをどのように処理しますか? そして、それは定義されていますか?
編集: もう少し詳細を追加するために、Cie C 内から fortran ルーチンを呼び出すことによって行われるアドレスを指すために fortran ポインターを使用して、malloc されたブロックを C から fortran に渡します。
Fortran ポイント ルーチンは次のようになります。
問題は、後でアクセスしようとすると、次のように言うことがあります。
これがブロックの先頭またはその前のどこかにあるアドレスにアクセスしているかどうかはわかりません。これは実装定義だと思いますが、各実装の詳細を知りたいです。
c - セグメンテーション違反 C と fortran
------ main.c---------
------ hello.f90 --------
配列要素をループすると、次のようになります。
セグメンテーション違反が発生します。
私が書いたときは起こりません:
c - ac ラッパー経由で Gnu Scientific Library を使用する Fortran プログラムからの出力がない
Fortran で gsl ライブラリを使用するためのラッパーを作成しようとしています。シンプルなラッパーを動作させることができました - http://www.helsinki.fi/~fyl_tlpk/luento/ohj-13-GSL-e.htmlの例
Fortran コード
c 関数
それはすべて順調です。ただし、より複雑なラッパーに問題があります。http://apwillis.staff.shef.ac.uk/aco/freesoftware.htmlの例から次のコードを変更しました。
c ラッパー (rng_initialise.c)
Fortran メイン (main.f90)
次に、コンパイルしてリンクします
このプログラムを実行すると、出力が得られません。ただし、rng_initialise 内の行をコメントアウトすると、
次に、Fortran コードから出力を取得します (「calling_rng_initialise」を STDOUT に書き込みます)。
したがって、問題は gsl_rng_alloc と gsl_rng_set の呼び出しにあるようです。しかし、エラー メッセージは表示されず、Fortran コードが何も実行できない理由がわかりません。何か案は?
c - Fortran と C の混合プログラミング
私は理論物理学の研究生で、宇宙論に取り組んでいます。私の研究の過程で、私は Fortran コードのかなり巨大なライブラリを使用しており、プログラミングのニーズに C を使用しました。
多数のテスト ファイルで 2 つのプログラムをリンクすることができましたが、見事に動作します。しかし、私はそれらすべてをリンクするためにオブジェクト ファイルを使用してきました。しかし、C で実際に実行しようとすると、Fortran ヘッダー ファイルへの参照が含まれます。それらは互いにうまく統合して呼び出しているように見えますが、Fortran ヘッダー ファイルの形式は C コンパイラと互換性がないため、ヘッダー ファイルにジャンプすると、構文を理解できないというエラーがスローされ始めます。
たとえば、Fortran ヘッダー ファイルは、real*8 の double 変数を定義しているため、C がそれらを読み取ると、エラーがスローされます。ファイル内のコメントでも同じことが起こります。
それで、この問題を解決する方法はありますか?つまり、Fortran 形式のヘッダー ファイルを C で読み込めるようにします。
インターネットを調べたところ、紛らわしい答えが見つかりました。どちらに従うべきかわかりません。この問題の助けをいただければ幸いです:)