0

pthreads を使用して共有ライブラリをコンパイルしました。pthread オプションを使用してコンパイルすると、アドレスが「00000000」になるのはなぜですか? どういう意味ですか ?pthread_create がバイナリに埋め込まれているということですか?

(とにかく、すべてが両方の方法で期待どおりに機能します)

-lpthread を使用した場合の objdump 出力は次のとおりです。

00000000      DF *UND*  00000aa5  GLIBC_2.1   pthread_create

-pthread を使用した場合の objdump 出力は次のとおりです。

00000000      D  *UND*  00000000              pthread_create
4

1 に答える 1

1

まだ移転されていません。

通常、最新のOSの実行可能ファイルは、直接アドレスではなくオフセットを使用します。このようにして、実行可能ファイルを任意のアドレスにロードできますが、そのためにすべてのオフセットを処理する必要があります。各実行可能フォーマットには、何をどのように再配置するかを示す特別なセクションがあります(.relocELFフォーマットなど)。

ここここでの移転に関する詳細情報とリンク。

于 2012-06-21T19:44:10.480 に答える