2016-09-20 16 views
0

私は.aのファイルを持っています。そのファイルの生成プロセスは私によって制御されておらず、そのソースもありません。リンクに使用すると、libA.aは、libA.aに定義されていないシンボルがある場合はlibB.aに依存しますが、libB.aに定義されています。ld/gccコマンドラインに正しい順序で入れることができます。2つのLinux静的ライブラリがある場合、どのライブラリが他の静的ライブラリに依存しているかを確認する方法は?

これらの依存関係をBUILDファイルbazelに保存したいので、リンク(つまりそれらのライブラリを2回指定する)をしたくないので、正確な依存関係を知りたいと思います。いくつかのコマンドラインツールがある場合、私は疑問に思う

は、libA.alibB.a与え、libA.alibB.aに依存するかどうかを伝えることができますか?そのようなスクリプトがない場合は、どうすればそのようなスクリプトを書くことができますか?

注:私の定義はで、依存度はで100%正確ではない場合があります。定義済み/未定義のシンボル以外の他の種類の依存関係があるかどうかを教えてください。

最も簡単な方法は、nm libA.anm libB.aの出力を処理し、Uシンボルを探すことですが、man nmに記載されている記号には多くの種類があり、それらのそれぞれが異なるセマンティックを持っているので、私は、私ならば、私はいくつかを逃す可能性が心配ですそのような単純化されたアプローチを使用する

+0

静的ライブラリが決定的に他のlibに依存しません。 –

+0

@IporSircerでは、 '.so'ファイルのようなファイル形式にエンコードされた依存関係はありませんが、依存関係はあります。 'libA.a'が' libB.a'に依存している場合、 'ld'の中でコマンドライン' libA.a'が 'libB.a'の前に置かれなければなりません。 –

答えて

0

私はUシンボルで始まるアプローチを使用します。実際には、大文字のシンボルタイプが気になる必要があります(リンク先のものです)。 (リストは、「並べ替え、そうcommがすべきしている私は、エクスポートとインポートされたシンボルを印刷するためのスクリプトを書いたが、この場合のために、LIBAがlibBからシンボルを使用するシンボルを一覧表示する

exports libB.a >libB-exports 
externs libA.a >libA-externs 
comm libB-exports libA-externs >libA-needs-libB 

を行うのに十分だろうただの仕事 ")。それらが共有ライブラリだった場合は、スクリプトを修正する必要があります(nmに `` -D 'オプションを追加する必要があります)。

さらに読書:

関連する問題