問題タブ [fortran-common-block]
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.
windows - 共有ライブラリ内の名前付き共通ブロック
共有ライブラリに Fortran サブルーチンを含めると、問題が発生します。このサブルーチンには、名前付き共通ブロックがあります。
この共通ブロックを使用し、共有ライブラリとリンクする Fortran メイン プログラムがあります。
この動作は、サブルーチンまたはメイン プログラムのいずれかで設定された共通ブロック内の変数が 2 つの間で共有されないというものです。
WindowsのMinGWでgfortran 4.9.3を使用しています。これが私の非常に単純な例の一部です。
メインプログラム:
サブルーチン:
メイクファイル:
mainp.exe
を実行するとivar = 0
、正しいのではなく、ivar=23
次のようになりますnm
。
これは、_whgc_
mainp.exe の唯一のシンボルです。
ただし、mainp.exe
gdb で実行し、 と の両方にブレーク ポイントを設定する
mainp
と、各ブレーク ポイントでsharedf
のアドレスを出力できます。ivar
アドレスが同じではありません。
動作から、GNU ld がシンボルと正しく一致していないことは明らか_whgc_
ですが、共有ライブラリのビルドまたは最終的なリンクでどのオプションを渡せばよいかわかりません。
(共通ブロックの代替案を提案しないでください。私の実際のアプリケーションでは、共通ブロックを使用するレガシー コードを扱っています。)
編集:
Linux/x86 で私の例を試してみましたが、動作は正しいです。もちろん、Linux では共有ライブラリと実行可能ファイルは ELF 形式のオブジェクトであり、Windows/MinGW では形式は PE/COFF です。
fortran - Fortran 共通ブロックで割り当て可能な文字を使用するには?
Fortran 77 で、共通ブロック内に割り当て可能な文字を持たせようとしています。しかし、コンパイラは常に文句を言います
私が持っていたコードは
それを機能させるために私が見た唯一の方法は、使用しないことですallocatable
しかし、事前に文字の長さを知る必要があるため、これは面倒です。
ブロックallocatable
内で動作させるにはどうすればよいですか?common
fortran - 特定のシステムの COMMON ブロックの最大サイズをアプリオリに知る方法はありますか?
COMMON
いくつかの HPC コードで ifort を使用して、ブロックに格納された大規模なデータ配列を持つ 30 年前の Fortran コードに取り組んでいます。コンパイルしてエラーが発生するかどうかを確認するだけでなく、システムの仕様に基づいてこれらの配列が HPC に対して大きすぎるかどうかを知る方法はありますか? コードを実行する予定の同じホストでコンパイルしている場合、コンパイラにその制限を問い合わせさせる方法はありますか?