8

リンクに問題があります。

問題を調査するために、-tリンカーフラグ(gcc -Wl、-t)を追加して、使用されているライブラリと静的ライブラリのオブジェクトを出力します。

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

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

4

2 に答える 2

6

私が探していたフラグは-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番目の項目は私が探していたものです。

于 2012-10-25T12:20:46.617 に答える
1

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

私が理解しているように、あなたはどのオブジェクト(A)が他のオブジェクト(B)をリンクさせているのかを調べようとしています。

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

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

于 2012-12-03T02:59:37.140 に答える