7

多数のライブラリに依存するプライベート プロジェクトのライブラリをコンパイルしています。具体的には、依存関係の 1 つが Fortran でコンパイルされています。場合によっては、依存関係が でコンパイルされg77ているのを見たことがありgfortranます。私のプロジェクトは、またはの./configureいずれかとリンクする-lg2c必要があります-lgfortranが、これまでは手動で行ってきました。

可能であれば、依存ライブラリを調べて (たとえばnm、または他のユーティリティを介して)、使用されたコンパイラがg77(そして-lg2cリンク オプションで使用します) またはgfortran(そして私は'を使い-lgfortranますか?

前もって感謝します!

4

3 に答える 3

6
nm filename | fgrep ' __g77'

一方、g77が使用された場合は結果が得られます

nm filename | fgrep '@@GFORTRAN'

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

于 2008-11-19T20:00:49.740 に答える
3

nm filenameの出力で、g77またはgfortranのどちらが使用されたかを示す何かをgrepする必要があります。ほとんどの場合、ライブラリが少なくとも1つの場所で入出力を行う場合、ライブラリはlibg2cまたはlibgfortranを呼び出し、そのg77中に記号、またはが含まれていることに気付くでしょうgfortran。したがって、最善の策はgrepを使用することです。

nm filename | grep _g77_
nm filename | grep _gfortran_

2つのメモ:

  1. geocarが@@GFORTRAN提案したように取得することは信頼できません。ライブラリのバージョン管理がサポートされているプラ​​ットフォームでのみ機能します。たとえば、Linuxは含まれますが、WindowsやMacOSは含まれません。
  2. 一部のコンパイル済みコードがサポートライブラリ関数をまったく呼び出さない可能性もあります(たとえば、単純な算術で入出力がない場合)。その場合、デバッグオプションを使用してコンパイルしない限り、どのコンパイラが出力したかを判断することはできません。
于 2009-07-23T08:03:09.863 に答える
1

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

于 2008-11-19T15:45:39.787 に答える