問題タブ [gfortran]
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.
gcc - 浮動小数点命令の生成を停止する gcc/gfortran コンパイラ フラグ/オプション
PIN/LLVM を使用して分析を行っていますが、FMUL、FLD などの浮動小数点 x87 コプロセッサ命令の生成をオフにする方法があるかどうか疑問に思っていました。
基本的に、コンパイラフラグなどを介して簡単に実行できるもの.
fortran - fortranの文字列に出力を書き込む方法は?
フォーマットされた出力を文字列に書き込む必要がありますDTSTR
。これは、layhe fortranで動作するために使用されますが、gfortranでは動作しません。
空の行だけを空にします。以下を使用すると正しく出力されます。しかし、私はこの文字列を保存したいと思います。gnu fortranでそれを行うことは可能ですか?
アップデート
次のファイルをコンパイルしようとしています。問題はCOMMONにあるのではないかと思います。
c++ - C++ のメモリ割り当てを処理する Fortran 77
数万行の Fortran 77 コードを使用する C++ プログラムを作成しようとしていますが、奇妙なエラーが発生します。3 つの座標 (x、y、z) と 3 つのベクトルのアドレスを C++ から fortran に渡し、fortran に初期点でいくつかの計算を実行させ、3 つのベクトルで結果を返します。
これを C++ 関数で数百回実行し、その関数を離れてから、戻ってもう一度実行します。1回目は完全に機能しますが、2回目は、正のxコンポーネントを持つポイントに対して有用な結果を返さなくなります(nanを返します)。
最初は、次の 3 つの点を除いて、アルゴリズムの問題のように見えます。
- 最初の 200 回の実行で完全に動作します
- Fortran から呼び出して C++ を完全に排除すると機能します (最終的なプログラムでは実行できません)。
- Fortran に print ステートメントを追加してどこが間違っているかをデバッグしようとしましたが、特定のサブルーチン (PRINT *,'Here' のような単純なものでも) に print ステートメントを追加すると、プログラムはファーストラン。
これが、C と fortran の関数/サブルーチン呼び出しの間でメモリがどのように割り当てられ、割り当てが解除されるかに関係していると私が考える理由です。基本的なセットアップは次のようになります: C++:
フォートラン:
私が作成している明らかなメモリの問題が見られる人はいますか? おそらく、Fortran が存在すると考えている一般的なブロックが、実際には C++ によって割り当て解除されているのでしょうか? print ステートメントを使用してデバッグする能力も、他の誰かの Fortran 77 コードの数千行を理解しようとする時間もありません。
C++ コードのコンパイルと最終的なリンクには g++ 4.5.1 を使用し、fortran コードのコンパイルには gfortran 4.5.1 を使用しています。
ありがとう
**編集:**
私が生まれる前に書かれたコードのあいまいな部分まで、エラーを追跡しました。何年にもわたる更新で削除された共通変数を探しているようです。なぜ 1 つの次元だけに影響を与えたのか、なぜバグが print ステートメントを追加することで再現可能だったのかはわかりませんが、それにもかかわらず、私はそれを排除しました。助けてくれてありがとう。
gfortran - gfortran に INTEGER - LOGICAL 変換を実行させる方法
thisによると、gfortran は整数論理変換を実行できますが、次のエラーが発生します。
.not.bDropped
コードを からに変更した方がよいことはわかっていますが(bDropped.eq.0)
、これは生成されたコードであるため、単純ではありません。
-std=xxx
さまざまなフラグを試しましたが、違いはありませんでした。
fortran - 標準に含まれていない FORTRAN 組み込み関数はどうすればよいですか?
gfortranを使用してソースからビルドすることにより、レガシーFORTRANコードを機能させようとしています。ようやく正常にビルドできましたが、実行時に範囲外エラーが発生します。私は gdb を使用し、エラーを loc() 組み込み関数を使用する関数まで追跡しました。渡された整数値 ae を使用して の値を出力しようとすると、loc(ae)
「現在のコンテキストにはシンボル "loc" がありません」というエラーが表示されます。ifort 11.x でコンパイルを試み、DDT でデバッグしたところ、同じエラーが発生しました。私にとって、これはコンパイラが組み込みについて何も知らないことを意味します。
少し読んだだけで、loc 組み込み関数が F77 標準の一部ではないことが明らかになったので、それが問題の一部である可能性があります。以下に組み込みの定義を投稿しましたが、それをコードに実装する方法がわからないため、loc() を使用できます。
アドバイスはありますか、それとも私の問題を誤解していますか? gfortran と ifort の両方が範囲外エラーのために同じ場所でクラッシュしますが、loc() を使用する関数は両方のコンパイラ間で同じ大きな数を返すためです。両方のコンパイラが loc に対して同じ値を返すと、 loc() が機能しないというのは少し奇妙に思えます。
使用法:
iaddr = loc(obj)
どこ:
obj は、アドレスが必要な変数、配列、関数、またはサブルーチンです。iaddr は、「obj」のアドレスを持つ整数です。アドレスは、LARn 命令によって格納されるものと同じ形式です。
説明:
LOC は、何かのアドレスを取得するために使用されます。返される値は Fortran 内ではあまり役に立ちませんが、GMAP サブルーチンや非常に特殊なデバッグに必要になる場合があります。
powershell - Code::Blocks で PowerShell を使用する
私のマシンはWin 7です。
Code::Blocks でシェルを cmd から PowerShell に変更するにはどうすればよいですか? Code:Blocks は cmd をシェルとして使用しますが、代わりに PowerShell を使用してもらいたいと考えています。どうやってやるの?私のコンパイラはgfortranです。
ジョン
fortran - プログレスバーは、gfortran にある間、ifortran で継続的に書き込まれません
Fortran で遺伝的アルゴリズムを作成して、一般的なフィットネス関数を long double 精度で計算できるようにしました。最初のバージョン (倍精度) は、プログレス バーを実装した gfortran 用に作成されました。
gfortran はreal*16
計算を実行できないため、ifort でコンパイルする必要があります。すべて正常に動作しますが、この場合 (ifort) 進行状況バーが正しく動作しません。つまり、サイクル全体が完了したときにのみ、進行状況バーが std 出力に出力されます。
プログレスバーのコードは次のとおりです。
私は 64 ビットの Intel Xeon を使用しており、ifort のオプションは次のとおりです。
gfortran を使用するときは、次のようにコンパイルします。
gfortran (ただし倍精度) では、すべて正常に動作します。
fortran - サブルーチンの呼び出し後、変数が奇妙なことにゼロの値を取る
Compaq Visual Fortran 6.6 で以前にコンパイルされたコードを gfortran に変換しようとして、いくつかの問題に直面しています。
これは私が gfortran で遭遇した特定の問題です:
値 3E+10 を取る "et" と呼ばれる変数があります。次に、プログラムはサブルーチンを呼び出します。「et」はサブルーチンに現れませんが、メイン プログラムに戻ると、値が 0 になっています
。Compaq Visual Fortran でコンパイルすると、この問題は発生しませんでした。
私が取り組んでいるコードは巨大な科学プログラムなので、その一部だけを以下に示します。
: "et" は、サブルーチン "perm" を呼び出す直前まで適切な値を保持します。このサブルーチンの直後に値ゼロを取ります。
「et」はどの共通ブロックにもありません
このコード片は、いくつかの異なるサブルーチンによって呼び出されるサブルーチンの一部です。さらに奇妙なのは、コードの他の部分で呼び出されたときにこの問題が発生しないことです (「et」はその値を保持します)
。とても感謝しています
arrays - FORTRAN 文字配列の反復処理
わかりました、次の Fortran 90 コードで多くの問題が発生しています。プログラム テスターは、input という文字配列を作成し、すべてのエントリを空白文字に初期化してから、ユーザーから文字列を取得して入力に格納する必要があります。getLength 関数は、スペースではない関数内の最後のインデックスを返すことになっています。したがって、ユーザーが文字列「こんにちは、お元気ですか?」を入力した場合、getLength(input) は 11 を返す必要があります。これは、指定された配列の末尾から開始し、スペース以外の最初の文字が発生した場所をマークすることで機能するはずです。 . 実際に実行しようとすると、gfortran は次のように述べています。修正する必要がありますか? 前もって感謝します!
r - R パッケージのビルドとエラー "ld: -lgfortran が見つかりません"
パッケージlarsをインストールしようとしています。Ubuntu 11.04 ナッティ 64 ビット。建物から私は得る:
gfortran がインストールされており、実行するgfortran --version
と取得されます
gfortran --version GNU Fortran (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2
sudo ldconfig -v
エラーを与える
/sbin/ldconfig.real: stat できません /usr/lib/libgfortran.so: そのようなファイルまたはディレクトリはありません
すでに gfortran を削除して再インストールしました。これを修正するには何が必要ですか?