問題タブ [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.
gfortran - どのコンパイラが使用されたかを調べる方法: g77 または gfortran
多数のライブラリに依存するプライベート プロジェクトのライブラリをコンパイルしています。具体的には、依存関係の 1 つが Fortran でコンパイルされています。場合によっては、依存関係が でコンパイルされg77
ているのを見たことがありgfortran
ます。私のプロジェクトは、またはの./configure
いずれかとリンクする-lg2c
必要があります-lgfortran
が、これまでは手動で行ってきました。
可能であれば、依存ライブラリを調べて (たとえばnm
、または他のユーティリティを介して)、使用されたコンパイラがg77
(そして-lg2c
リンク オプションで使用します) またはgfortran
(そして私は'を使い-lgfortran
ますか?
前もって感謝します!
file - gfortran: .mod ファイルの出力ディレクトリを制御する方法
gfortran (GCC) によって生成された .mod ファイルを別の出力ディレクトリに配置する方法はありますか? 次のように -o フラグを使用してオブジェクト ファイルまたはその他の出力を配置する方法を知っています。
ただし、.mod ファイル (上記の呼び出しによって生成される) は -o フラグの影響を受けず、現在のディレクトリに配置されます。一部の商用コンパイラには -qmoddir のようなフラグがありますが、gfortran に似たものは見つかりません。
そのようなフラグがない場合、追加の手順で .mod ファイルを生成して -o フラグを機能させることはできますか?
fortran - gfortran から .dbf ファイルを読み取る最も簡単な方法は何ですか?
私は gfortran を使用しています。ESRI Shapefile に関連付けられた .dbf ファイルからレコードを読み取る関数を作成する必要があります。私が読めるはずのファイルは、インターネットから入手できますhttp://diss.rm.ingv.it/diss/DISS_3.0.4.shp.zip
file
ファイルの形式に関するコマンドの意見は次のとおりです。
ご提案いただきありがとうございます
matrix - BLAS サブルーチン dgemm、dgemv、および ddot はスカラーでは機能しませんか?
BLAS のサブルーチン dgemm、dgemv、および ddot を使用する Fortran サブルーチンがあります。これらは、行列 * 行列、行列 * ベクトル、およびベクトル * ベクトルを計算します。m * m 行列と m * 1 ベクトルがあります。場合によっては、m=1 です。これらの場合、これらのサブルーチンはうまく機能しないようです。エラーは出ませんが、結果に数値的な不安定性があるようです。だから私は次のようなものを書く必要があります:
したがって、私の実際の質問は、m=1 の場合にこれらの BLAS のサブルーチンが正しく機能しないということですか、それとも私のコードに何か問題があるのでしょうか? コンパイラはこれに影響を与えることができますか? 私はgfortranを使用しています。
compilation - gfortran から ifort への移植中のコンパイル エラー
プログラムを gfortran から ifort (Intel Fortran Compiler 11) に移植しようとしています。gfortran でしかコンパイルできない 2 つのファイルが残っています。
これらのファイルを使用して intel fortran コンパイラを実行しようとすると、次のようになります。
オブジェクトファイルは作成されません。
さて、この問題 o_O をどのように解決できますか?
編集:ファイル拡張子の名前を ff から fpp に変更する
役立ちます:
http://www.rcac.purdue.edu/userinfo/resources/black/userguide.cfm#compile_fortran_cpp
更新:ファイルの名前を変更せずに intel fortran コンパイラを動作させる方法はありますか?
static - gfortran および gcc と静的にリンクする混合言語
静的にリンクされた実行可能ファイルにコンパイルしたい C と Fortran で書かれたコードがあります。-fno-underscoring
( gfortranのオプションを使用して) コードを動的にコンパイルすると、すべて正常に動作します。ただし、これを .so ファイルにリンクし、必要なライブラリのほとんどを静的にリンクしてから、このブログ投稿libkrb5
で説明されている方法と非常によく似た方法で に動的にリンクしたいと考えています。
前回のブログ投稿の手順に従い、問題なく .so ライブラリをコンパイルできました。nm
Fortran サブルーチンと C 関数が表示されており、良好な状態であることを示しています。
最初の関数は Fortran で、2 番目の関数は C で記述されています。これらにはアンダースコアなどがないため、リンクする必要があります。私のメイン プログラム (Fortran) は、他の Fortran ソース ファイルと同じようにコンパイルされています。ただし、リンクしようとすると、エラーが発生します。
collect2: ld が 1 つの終了ステータスを返しました
ではmain_program.o
、
すべてが順調に見えるのに、リンクしていないのはなぜですか?
fortran - gfortran を使用して Fortran 90 で純粋なサブルーチンを作成および呼び出す
gfortran を使用して Fortran 90 で純粋なサブルーチンを作成および呼び出す場合、コンパイラがこのエラーを出力する理由を確認するにはどうすればよいですか?
できるだけ具体的に質問すると同時に、他の人にも役立つように十分に一般的であるため、実際のコードに貼り付けることは避け、代わりに何が起こったのかをスケッチします。
Fortran 90 には純粋な手続きに関するさまざまな規則があることを理解しています。基本的には、関数またはサブルーチンのいずれかで副作用を許可しないこと、および で宣言されたサブルーチン パラメータの変更を許可しないことに要約すると思いますintent(in)
。最初に純粋であると宣言されておらず、パラメーターが意図を宣言していなかったにもかかわらず、副作用を実行しなかった一連のサブルーチンがあります。in
まず、すべてのパラメーター宣言を変更して、 、out
、またはのいずれかの意図を明示的に宣言しinout
ました。次に、すべてのサブルーチンを と宣言しましたPURE
。当然、最初の試行で多くのエラーが発生しましたが、コンパイラーがエラーの内容 (たとえば、このパラメーターを変更しているなど) を教えてくれたintent(in)
ので、それらをすべて修正しました。
ただし、これらのプロシージャ間で呼び出しが行われるため、今でも上記の形式のエラーが多数発生します: Subroutine call to XXXX at (1) is not PURE
. 私が理解していないのは、呼び出しが純粋ではない理由です。XXXX を純粋にするために考えられることはすべて実行しましたが、コンパイラはまだそうではないと考えています。
だから私の質問 - 言い換えれば - XXXX が純粋ではないと思う理由を gfortran に教えてもらうにはどうすればよいですか?
fortran - gfortran Fortran 90 プログラムで各書き込み後に出力をファイルにフラッシュするにはどうすればよいですか?
ループの反復ごとに出力ファイルに数値を出力する Fortran 90 プログラムでループを実行しています。問題は、出力がファイルに保存されず、非常に多くのステップごとに保存されることです。各ステップをフラッシュするにはどうすればよいですか?
コード例:
前もって感謝します。
pointers - Fortranポインター関数:このコードの動作が関数呼び出しの順序に依存するのはなぜですか?
コンテクスト
以下に掲載されているおもちゃのFortranコードは、2つのポインター関数を呼び出します。つまり、両方の関数がポインタを返します。実際、これらは両方とも配列ポインターです。どちらも同じことを行おうとします。つまり、1、2、3の3つの要素を持つ整数配列を参照する整数配列ポインターを返します。最初の関数は、ポインター割り当て演算子(=>)を使用して、関数ポインターをデータを保持する割り当て可能な配列。2番目の関数は、データを格納するために、ポインタを介して動的メモリのブロックを直接割り当てます。呼び出し側プログラムは、返された配列の要素を出力するだけです。
これが私が奇妙だと思うものです。
- の結果を指す
a
と、結果function1
は正しくありません。の最初の要素はa
「clobbered」のように見えます :a
has0
、、。2
3
- の結果を指す
b
と、function2
結果は正しいです。 、、b
を取得します。1
2
3
- それでも見知らぬ人は、それが正しくなるよう に変化を指し示した後
b
の結果を指し示します。次に、、、。_function2
a
function1
a
a
1
2
3
質問
なぜこれが発生するのですか?より正確には、割り当て可能な配列へのポインターを返すポインター関数が、呼び出し元のその配列の最初の要素をクローバーするのはなぜですか?さらに正確に言えば、あるポインター()を指すb
と、別のポインター()に副作用が生じるのはなぜa
ですか。ターゲットは、相互作用しないように記述されたさまざまな関数から取得されます。
警告
この動作は、Ubuntu(Jaunty)でIntelラップトップを実行しているGNUFortranコンパイラv.4.3.3を使用して取得します。結果は異なる場合がありますが、それでもなお興味深い場合があります。最後に、いつものように、それは私の側のオペレーターエラーである可能性があり、それは少なくとも私にとって興味深いでしょう。
コード
macos - Mac OS X 10.5 および 10.6 で動作する Fortran 実行可能ファイルを作成する方法
Mac OS X 10.5 と 10.6 の両方で動作するように、gfortran を使用して fortran コードをコンパイルしたいと考えています。これを行う方法はありますか?10.6 でコンパイルしようとしましたが、10.5 で実行可能ファイルを実行すると、次のメッセージが表示されます。
dyld: 不明な必須ロード コマンド 0x80000022 トレース/BPT トラップ