2012-10-25 5 views
8

リンクに問題があります。gccのリンクオプションが、オブジェクトファイルがバイナリにリンクされている理由を確認します。

問題を調査するために、使用されるライブラリとスタティックライブラリのオブジェクトが使用されるようにリンカフラグ(gcc -Wl、-t)を追加するには、-tを追加します。

ある設定では、オブジェクトファイルのセットが使用され、他のセットでは1つの静的ライブラリがあります。

特定のオブジェクトは、(以前に未定義のシンボルがオブジェクトファイルで定義されているもの)と同じ静的ライブラリからバイナリおよび他にリンクされている理由を参照するには(おそらくLDフラグ)方法はありませんか?

答えて

4

私が探していたフラグは-Mで、標準出力にリンクマップを出力します。 LDの

(1):リストで

-M 
    --print-map 
     Print a link map to the standard output. A link map provides information about the link, including the following: 
      · Where object files are mapped into memory. 
      · How common symbols are allocated. 
      · All archive members included in the link, with a mention of the symbol which caused the archive member to be brought in. 
      · The values assigned to symbols. 

2番目の項目は、私が探していたものです。

1

最後に質問と回答を編集してから1ヶ月以上も前に賞金を追加したので、自分の答えが気に入らないと思っています。

私の理解では、あなたはいくつかの他のオブジェクト(B)の中でリンクする原因となっているオブジェクト(A)を見つけようとしている。

あなたはBの存在なしにコンパイル/リンクを行う場合(つまりなしコマンドラインで)、それが必要である理由を示すエラーメッセージが表示されます。これはAを参照します。

Bがライブラリにある場合、そのライブラリの特別なバージョンを作成する必要がありますB.

+0

実際に私は自分の答えが好きです。私は間違って縛られた、それをun'boundすることはできません:) – dimba

関連する問題