3

次のような動的共有ライブラリに対してアプリケーションをリンクする場合

gcc -o myprog myprog.o -lmylib

リンカ (ld私の Linux 上) は -l オプションを使用して、生成された myprog ELF 実行可能ファイルに、mylibロード時とリンク時 (両方ともプログラムが開始されるとき) に使用されるライブラリの名前 (この場合)を格納することを知っています。遅延動的リンクを無視する場合)。動的共有ライブラリに関して、他のジョブは何を実行するのでしょうかld(コンパイル時に行われる静的リンク手順についてのみ話しています)。

  • ld提供された動的共有ライブラリに未定義のシンボルが存在するかどうかを確認する必要があります
  • 他のものは?

さらに、ELF 形式と動的リンクおよびロード プロセスに関して、あなたが使用しているポインタ (本、オンライン ドキュメント) に興味があります。

4

2 に答える 2

3

重要なステップの 1 つは、動的シンボル テーブルの作成です。これは、実行時リンカーld.soが実行時にライブラリに対して実行可能ファイルをリンクするために使用できます。また、動的にリンクされたシンボルを指すように変更する必要があるマシン コードの場所を記録するために、動的再配置テーブルを書き込みます。詳細を表示するには:

objdump -T myprog
objdump -R myprog

また、実行可能ファイルに書き込まれる文字列は、実際にSONAMEはライブラリの であることに注意してくださいmylib.so.0。これにより、後で互換性のない新しいバージョンをインストールした場合でもmylib.so.1.42、実行可能ファイルは互換性のある ABI バージョン 0 を使用するようになります。詳細については:

ldd myprog

もちろん、リンカーはオブジェクト ファイルを相互にリンクしますが、動的共有ライブラリがなくてもリンクを実行するため、操作のこの部分には関心がないと思います。

于 2013-11-01T23:45:15.880 に答える