使用されたコンパイラを確認する方法:g77またはgfortran
質問
私は、多くのライブラリに依存するプライベートプロジェクト用のライブラリをコンパイルしています。具体的には、依存関係の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つのメモ:
- geocarが示唆した
@@ GFORTRAN
のグレッピングは信頼性がありません。 linux。ただし、WindowsまたはMac OSではありません。 - 一部のコンパイル済みコードは、サポートライブラリ関数をまったく呼び出さない可能性があります(実行するのが単純な算術演算で、入出力がない場合など)。その場合、デバッグオプションを使用してコンパイルしない限り、どのコンパイラがそれを出力したかを知ることはできません。
nmを使用して、コンパイルされたコードがいずれかの関数を使用しているかどうかを確認することで、それを理解できるかもしれませんが、それはかなりハックです。使用可能なライブラリに基づいて判断できる場合があります(libg2cが使用できない場合、たとえばg77ではありません)が、両方が使用可能な場合はまだあいまいさがあります。依存関係を自分でビルドできる場合は、ビルドプロセスのある部分で、別の部分(変数、ファイルなど)に使用した部分を伝えることができます。