JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris 11.1 リンカーとライブラリガイド     Oracle Solaris 11.1 Information Library (日本語)
このドキュメントの評価
search filter icon
search icon

ドキュメントの情報

はじめに

パート I リンカーおよび実行時リンカーの使用

1.  Oracle Solaris リンカーの紹介

2.  リンカー

リンカーの起動

直接起動

コンパイラドライバを使用する

クロスリンク編集

リンカーオプションの指定

入力ファイルの処理

アーカイブ処理

共有オブジェクトの処理

追加ライブラリとのリンク

ライブラリの命名規約

共有オブジェクトとアーカイブとの混合体へのリンク

コマンド行上のアーカイブの位置

リンカーが検索するディレクトリ

実行時リンカーが検索するディレクトリ

初期設定および終了セクション

シンボルの処理

シンボルの可視性

シンボル解決

単純な解決

複雑な解決

重大な解決

未定義シンボル

実行可能ファイルの作成

共有オブジェクト出力ファイルの生成

ウィークシンボル

出力ファイル内の一時的シンボル順序

追加シンボルの定義

-u オプションを使用した追加シンボルの定義

シンボル参照の定義

絶対シンボルの定義

一時的シンボルの定義

シンボル定義の増強

シンボル範囲の縮小

シンボル削除

外部結合

文字列テーブルの圧縮

出力ファイルの生成

機能要件の特定

プラットフォーム機能の特定

マシン機能の指定

ハードウェア機能の特定

ソフトウェア機能の特定

シンボル機能関数ファミリの作成

シンボル機能データ項目のファミリの作成

オブジェクト機能のシンボル機能への変換

機能ファミリの実行

再配置処理

ディスプレイスメント再配置

スタブオブジェクト

補助オブジェクト

デバッガによる補助オブジェクトのアクセスと使用

親オブジェクト

デバッグ支援

3.  実行時リンカー

4.  共有オブジェクト

パート II クイックリファレンス

5.  リンカーのクイックリファレンス

パート III 詳細情報

6.  直接結合

7.  システムのパフォーマンスを最適化するオブジェクトの構築

8.  mapfile

9.  インタフェースおよびバージョン管理

10.  動的ストリングトークンによる依存関係の確立

11.  拡張性メカニズム

パート IV ELF アプリケーションバイナリインタフェース

12.  オブジェクトファイル形式

13.  プログラムの読み込みと動的リンク

14.  スレッド固有ストレージ (TLS)

パート V 付録

A.  リンカーとライブラリのアップデートおよび新機能

B.  System V Release 4 (バージョン 1) Mapfile

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

デバッグ支援

このリンカーは、リンク編集プロセスを詳細にトレースできるデバッグ機能を備えています。この機能は、ユーザーのアプリケーションおよびライブラリのリンク編集を理解およびデバッグする場合に役立ちます。この機能によって表示される情報の種類は変更されない予定です。ただし、この情報の正確な形式は、リリースごとに若干変更される場合があります。

ELF フォーマットを熟知していないと、デバッギング出力の中には見慣れないものがあるかもしれません。しかし、多くのものが一般的な関心を惹くものでしょう。

デバッグは、-D オプションを使用して実行できます。このオプションは、1 つまたは複数のトークンで増強し、必要なデバッギングのタイプを指示する必要があります。

-D で使用できるトークンは、コマンド行に -D help を入力すると表示できます。

$ ld -Dhelp

デフォルトでは、すべてのデバッグ出力が標準エラー出力ファイルである stderr に送られます。output トークンを使用すると、ファイルにデバッグを出力できます。たとえば、名前が ld-debug.txt のファイルにヘルプテキストを取り込むことができます。

$ ld -Dhelp,output=ld-debug.txt

ほとんどのコンパイラドライバは -D オプションに別の意味を割り当てており、多くの場合、前処理用マクロを定義します。LD_OPTIONS 環境変数を使用すると、コンパイラドライバをバイパスして、-D オプションを直接リンカーに指定できます。

次の例では、入力ファイルの監視方法を示しています。この構文は、リンクを編集するときにどのライブラリが使用されているかを判別するときに利用できます。アーカイブから抽出されたオブジェクトもこの構文で表示されます。

$ LD_OPTIONS=-Dfiles cc -o prog main.o -L. -lfoo
....
debug: file=main.o  [ ET_REL ]
debug: file=./libfoo.a  [ archive ]
debug: file=./libfoo.a(foo.o)  [ ET_REL ]
debug: file=./libfoo.a  [ archive ] (again)
....

ここでは、prog のリンク編集を満たすために、メンバー foo.o がアーカイブライブラリ libfoo.a から抽出されています。foo.o の抽出が、その他の再配置可能オブジェクトの抽出を認めていないことを検証するために、このアーカイブが 2 回検索されていることに注意してください。診断内に「(again)」が複数個含まれていることから、このアーカイブが lorder(1)tsort(1) による並べ替えの候補であることがわかります。

symbols トークンを使用することにより、どのシンボルによってアーカイブメンバーが抽出されたか、また、最初のシンボル参照を実行したオブジェクトを判別できます。

$ LD_OPTIONS=-Dsymbols cc -o prog main.o -L. -lfoo
....
debug: symbol table processing; input file=main.o  [ ET_REL ]
....
debug: symbol[7]=foo  (global); adding
debug:
debug: symbol table processing; input file=./libfoo.a  [ archive ]
debug: archive[0]=bar
debug: archive[1]=foo  (foo.o) resolves undefined or tentative symbol
debug:
debug: symbol table processing; input file=./libfoo(foo.o)  [ ET_REL ]
....

シンボル foo は、main.o によって参照されます。このシンボルは、リンカーの内部シンボルテーブルに追加されます。このシンボル参照によって、再配置可能オブジェクト foo.o が、アーカイブ libfoo.a から抽出されます。


注 - この出力は、このドキュメント用に簡素化したものです。


detail トークンを、symbols トークンとともに使用すると、入力ファイル処理中のシンボル解決を監視できます。

$ LD_OPTIONS=-Dsymbols,detail cc -o prog main.o -L. -lfoo
....
debug: symbol table processing; input file=main.o  [ ET_REL ]
....
debug: symbol[7]=foo  (global); adding
debug:   entered  0x000000 0x000000 NOTY GLOB  UNDEF REF_REL_NEED
debug:
debug: symbol table processing; input file=./libfoo.a  [ archive ]
debug: archive[0]=bar
debug: archive[1]=foo  (foo.o) resolves undefined or tentative symbol
debug:
debug: symbol table processing; input file=./libfoo.a(foo.o)  [ ET_REL ]
debug: symbol[1]=foo.c
....
debug: symbol[7]=bar  (global); adding
debug:   entered  0x000000 0x000004 OBJT GLOB  3     REF_REL_NEED
debug: symbol[8]=foo  (global); resolving [7][0]
debug:       old  0x000000 0x000000 NOTY GLOB  UNDEF main.o
debug:       new  0x000000 0x000024 FUNC GLOB  2     ./libfoo.a(foo.o)
debug:  resolved  0x000000 0x000024 FUNC GLOB  2     REF_REL_NEED
....

main.o からの、オリジナルの未定義シンボル foo が、アーカイブメンバー foo.o から抽出されたシンボル定義でオーバーライドされます。このシンボルの詳細情報は、各シンボルの属性に反映されます。

上記の例からわかるように、デバッギングトークンのいくつかを使用すると、豊富な出力が作成されます。入力ファイルのサブセットに関するアクティビティーを監視するには、リンク編集コマンド行に直接 -D オプションを配置します。このオプションはオンとオフを切り替えることができます。次の例では、シンボル処理の表示がオンになるのは、ライブラリlibbar の処理中だけです。

$ ld .... -o prog main.o -L. -Dsymbols -lbar -D!symbols ....

注 - リンク編集コマンド行を入手するには、使用しているドライバからコンパイル行を拡張する必要があります。「コンパイラドライバを使用する」を参照してください。