0

ビルドスクリプト(makeではなく)を使用してプロジェクトをビルドし、さまざまなライブラリにリンクする継承されたプロジェクトがあります。

ビルドを実行するときに、ビルド出力を解析して、最終的な実行可能ファイルにリンクされている実際の静的ライブラリがどこにあり、どこから来ているのかを判断したいと思います。

スクリプトはコンパイルされ、GNUツールとリンクしています。

4

3 に答える 3

1

nmツールを使ってみてはいかがでしょう。適切なオプションがあれば、バイナリ (アーカイブまたはリンクされたイメージ) を調べて、どのオブジェクトがそれにリンクされているかを教えてくれます。

実際、これは私が仕事で使用するワンライナーです。

#!/bin/sh

nm -Ag $* | sed 's/^.*\/\(.*\.a\):/\1/' | sort -k 3 | grep -v ' U '

未定義のシンボルの原因を見つけます。最後の grep 式を切り取るだけで、必要なものがほとんど得られるはずです。

于 2008-09-06T20:25:59.720 に答える
0

この点で生活をより困難にする静的ライブラリ。動的ライブラリの場合、結果の実行可能ファイルで ldd を使用するだけで完了できます。最善の策は、ある種の構成ファイルです。あるいは、gcc/ld への -l 引数を探すこともできます。これらは、ライブラリを指定するために使用されます。出力からそれを抽出するためのスクリプトを作成することもできますが、手動で行う必要があると思います。スクリプトが何を探すべきかを知る頃には、おそらく既に答えを知っているからです。

于 2008-09-06T20:20:20.890 に答える
0

Perl などを使用して何か便利なことを行うことはおそらく可能ですが、詳細を提供する必要があります。一方、スクリプトを単純に分析する方が簡単かもしれません...

于 2008-09-06T20:22:13.553 に答える