使用されたコンパイラを確認する方法:g77またはgfortran

StackOverflow https://stackoverflow.com/questions/302171

  •  08-07-2019
  •  | 
  •  

質問

私は、多くのライブラリに依存するプライベートプロジェクト用のライブラリをコンパイルしています。具体的には、依存関係の1つがFortranでコンパイルされます。いくつかの例では、 g77 でコンパイルされた依存関係を見ましたが、 gfortran でコンパイルされた依存関係を見ました。私のプロジェクトは ./ configure ' -lg2c または -lgfortran のいずれかとリンクするようになっていますが、今のところ私はそれをやっていますハンド。

可能であれば、使用するコンパイラが g77 nm または他のユーティリティを使用して)から調べる方法>(リンクオプションで -lg2c を使用します)または gfortran (そして -lgfortran を使用します)?

事前に感謝します!

役に立ちましたか?

解決

nm filename | fgrep ' __g77'

g77が使用されている場合、結果が表示されます

nm filename | fgrep '@@GFORTRAN'

gfortranを使用すると結果が得られます。

他のヒント

nm filename の出力で、g77またはgfortranが使用されたかどうかを示すgrepが必要です。ほとんどの場合、ライブラリが少なくとも1つの場所で入出力を行うと、libg2cまたはlibgfortranが呼び出され、 g77 を含むシンボル、または< code> gfortran 。したがって、最善の策はgrepを使用することです:

nm filename | grep _g77_
nm filename | grep _gfortran_

2つのメモ:

  1. geocarが示唆した @@ GFORTRAN のグレッピングは信頼性がありません。 linux。ただし、WindowsまたはMac OSではありません。
  2. 一部のコンパイル済みコードは、サポートライブラリ関数をまったく呼び出さない可能性があります(実行するのが単純な算術演算で、入出力がない場合など)。その場合、デバッグオプションを使用してコンパイルしない限り、どのコンパイラがそれを出力したかを知ることはできません。

nmを使用して、コンパイルされたコードがいずれかの関数を使用しているかどうかを確認することで、それを理解できるかもしれませんが、それはかなりハックです。使用可能なライブラリに基づいて判断できる場合があります(libg2cが使用できない場合、たとえばg77ではありません)が、両方が使用可能な場合はまだあいまいさがあります。依存関係を自分でビルドできる場合は、ビルドプロセスのある部分で、別の部分(変数、ファイルなど)に使用した部分を伝えることができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top