TOP(サイトマップ) | Solaris man マニュアル | |
(はじめに) はじめに Solarisって・・・ SunのセミナーとSDC Solaris 10概要 資格(SCSA,SCNA) Solarisフォーラム 管理人に連絡 (Solaris基本) Solarisのインストール システムの起動と停止 ファイルシステム オートマウントとマウント パッケージとパッチ ユーザの追加と削除 ファイル権限(セキュリティ) バックアップとリストア CDE環境 プロセス管理/監視 (ネットワーク管理) OSIを理解してみる TCP/IPの設定 (TCP/IP入門) DNSの設定 NISの設定 NFSの設定(WebNFS,CacheFS) (NIS、NIS+、DNS違い) DHCPの設定 1つのNICで複数IP設定 (IO関連) インタフェース概要 SAFの管理 プリンタ管理概要 プリンタコマンド SunSolve Online SCSI情報(KEY,ASC,ASCQ) (ソフトウェア関連) Bash Apache Solstice DiskSuite (SDS OSミラー回復) Veritas VxVM (OBPについて) PROM(OBP)の概要 OBPでのキーボード操作 一般的なOBPコマンド SolarisでOBPの設定 OBPに関するFAQ (トラブル時の対応) 基本情報 エラーメッセージ (主要メッセージ一覧) 性能関連コマンド トレースコマンド クラッシュダンプ SunSolve Online (その他) 小技集 UNIXコマンド (manマニュアル) システムチューニング ネットワークチューニング UltraSPARC T1について (FAQ) rootのPASSが不明 ハングアップかな? ハードトラブル OSが起動しない(b) swap領域の拡張方法 (リンク) Sun関連リンク その他リンク アバウトなJava入門 Perlメモ(逆引き用) |
ユーザーコマンド ldd(1) 【名前】 ldd - 実行可能ファイルまたは共有オブジェクトの動的依存関係の 表示 【形式】 ldd [-d | -r] [-c] [-e envar] [-f] [-i] [-L] [-l] [-s] [-u] [-v] filename ... 【機能説明】 ldd ユーティリティは、実行可能ファイルまたは共有オブジェクト の動的依存関係を表示します。ldd は実行時リンカーld.so.1 を使 用して診断情報を生成します。実行時リンカーは検査対象の オ ブ ジェクトを取得して、実行中のプロセスで使用されるのと同様に処 理します。デフォルトでは、すべてのレイジーな依存関係の読み込 みを発生します。 filename が実行可能ファイルである場合、ldd は filename の 読 み込み時に読み込まれるすべての共有オブジェクトのパス名を表示 します。 filename が共有オブジェクトである場合、ldd は filename の 読 み込み時に読み込まれるすべての共有オブジェクトのパス名を表示 します。ldd は、検査対象の共有オブジェクトに実行権が与えられ ているものとみなします。実行権が与えられていない場合、ldd は 警告を出力してからファイルを処理します。 ldd はファイルを 1 つずつ入力処理します。入力ファイ ル ご と に、ldd は次のいずれかを実行します。 o オブジェクトの依存関係が存在する場合はその依存関係を 表 示する o 依存関係が存在しない場合はそのまま続行する o 正常に処理できなかった場合はエラーメッセージを出力する 【オプション】 ldd は、filename とそこで使用される共有オブジェクト間の互 換 性を調べることもできます。次のオプションを指定すると、ldd は filename の実行時に発生する未解決のシンボル参照について、 警 告を出力します。 -d 即時参照をチェックします。 -r 即時参照およびレイジー参照の両方をチェックします。 1 回の ldd 呼び出しでは、上記のオプションのいずれか一方だ け しか指定できません。即時参照の対象は通常、実行可能または共有 オブジェクトが使用するデータ項目、関数へのポインタ、そして、 位 置 に依存する共有オブジェクトからの関数呼び出しです。レイ ジー参照は通常、位置に依存しない共有オブジェクトからのグロー バル関数の呼び出し、または実行可能ファイルからの外部関数呼び 出しです。各参照タイプの詳細は、『リンカーとライブラ リ』 の 「再配置処理の実行に関する説明」を参照してください。オブジェ クトの読み込みは、再配置処理の影響も受けます。詳細は 「レ イ ジー読み込み」を参照してください。 ldd は依存関係についても確認することができます。次に示す各オ プ ショ ン を使用すると、ldd は、filename が読み込まれたとき に、未参照または未使用の依存関係が読み込まれた場合に、それら に 対する警告を出力します。1 つのシンボル参照が 1 つの依存関 係にバインドされているときのみ、その依存関係が使用されている と考えられます。したがって、これらのオプションはシンボル参照 が検査されているときにのみ有用です。-r オプションが有効で な い場合、-d が有効になります。 オブジェクトにより定義されているが、オブジェクトからバインド さ れていない依存関係は、未参照の依存関係です。filename が読 み込まれたときにその他のオブジェクトによりバインドされていな い依存関係は、未使用のオブジェクトです。 -U 未参照または未使用の依存関係を表示します。未参照 の 依存関係が、filename で読み込まれた他のオブジェクト によりバインドされていない場合、その依存関係は未 使 用 としても設定されます。巡回の外部にあるオブジェク トにバインドされていない巡回依存関係は、未参照と も みなされます。 -u 未使用のオブジェクトを表示します。 -U は -u の機能をすべて含んでいますが、-U または -u オプショ ン のどちらか 1 つだけを ldd の 1 回の呼び出しの間に指定する ことができます。-r オプションを使用するとき未参照または未 使 用であると判明したオブジェクトは、依存関係として削除すべきで す。これらのオブジェクトは参照を提供しませんが、filename が 読 み込まれるとき、不必要なオーバーヘッドを生みます。-d オプ ションを使用する場合、未参照または未使用と判明したオブジェク トは filename が読み込まれるときにすぐには要求されません。こ れらのオブジェクトはレイジー読み込みの候補です。詳細は、使用 法の Lazy Loading を参照してください。 未使用の依存関係を取り除くと、実行時リンクのオーバーヘッドを 下げることができます。未参照の依存関係を取り除くと、実行時リ ンクのオーバーヘッドを少し下げることができます。ただし、未参 照の依存関係の削除は、異なるオブジェクトと組み合わされたとき や、またはその他のオブジェクトの依存関係が変化するにつれ、未 使用の依存関係に対して保護されます。 次のオプションを使用できます。 -c いっさいの構成ファイルの使用を禁止します。構 成 ファ イルは、デフォルトの検索パスの変更、 ディレクトリキャッシュの提供、および代替オブ ジェ ク ト 依 存 関 係の提供に利用できます。 crle(1) のマニュアルページを参照してく だ さ い。 -e envar 環境変数 envar を設定します。このオプショ ン は、ldd そのものに悪影響を与える可能性のある 実行時リンカー環境変数を試す場合に便利です。 -f 安全でない実行可能ファイルの検査を強制 し ま す。スーパーユーザーが呼び出した場合、ldd は デフォルトで、安全でないことが判明した実行可 能 ファ イルをいっさい処理しません。実行可能 ファイルは、指定され た イ ン タ プ リ タ が /usr/lib または /etc/lib にない場合、あるい は、インタプリタが判別できない場合は、安全で ないとみなされます。「セキュリティ」を参照し てください。 -i 初期化セクションの実行順序を表示します。表示 さ れる順序は、-d または -r オプションの使用 によって変わります。「初期化順序」を参照して ください。 -L レイジー読み込みを有効にします。これは、検査 対象のオブジェクトをプロセスの一部として読み 込む場合のデフォルトの動作モードです。この場 合、レイジーオブジェクト内で定義されているシ ンボルが参照されたときに、レイジーな依存関係 ま た はフィルタだけがプロセスに読み込まれま す。-L オプションとともに -d または -r オ プ ションを使用すると、実行プロセスで発生する依 存関係および読み込み順序を調べることができま す。 -l あらゆるフィルタを強制的に即時処理します。 ( すべてのフィルタとその依存関係を表示するため )フィルタの即時処理は現在、ldd のデフォル ト の動作モードです。ただし、このデフォルトモー ドでは、検出されなかった外部フィルタはそのま ま 無視されます。-l オプションを使用すると、 検出されなかった外部フィルタに起因するエラー メッセージが生成されます。 -s 共有オブジェクトの依存関係を調べるのに使用し た検索パスを表示します。 -v filename の処理中に発生したすべての依存関 係 を表示します。このオプションを指定すると、依 存関係が要求するバージョン情報も表示します。 pvs(1) の マ ニュアルページを参照してくださ い。 【使用法】 [セキュリティ] スーパーユーザーは、検査対象の実行可能ファイルが信頼できると 判 明している場合に限り、-f オプションを使用します。信頼でき ない実行可能ファイルに -f オプションを使用すると、システムの セキュリティが損なわれる可能性があります。検査対象の実行ファ イルが信頼できるものかどうかが不明な場合、ユーザーユーザーは 一 時的に一般ユーザーになり、一般ユーザーとして ldd を呼び出 す必要があります。 dump(1) および adb(1) の :r サブコマンドを使用 し な い で、 adb(1) を使用することにより、信頼できないオブジェクトを安全 に検査できます。また、スーパーユーザー 以 外 の ユー ザー は adb(1) の :r サブコマンドまたは truss(1) を使用することに よって、それほどリスクを冒さずに信頼できない実行可能ファイル を 検 査できます。信頼できない実行可能ファイルで ldd、adb の :r サブコマンド、または truss を使用する場合は、リスクを最小 限に抑えるためにユーザーID nobody を使用してください。 [レイジー読み込み] レイジー読み込みを直接的に適用するには、レイジーな依存関係を 指 定します ld(1) の -z lazyload オプションを参照)。レイジー 読み込みを間接的に適用するには、フィルタを指定します (ld(1) の -f オプションと -F オプションを参照)。レイジー読み込みを オブジェクトに適用する場合、使用するオプションによっ て は、 ldd の出力が異なることがあります。すべての依存関係がレイジー であるとされたオブジェクトの場合、ldd のデフォルトの動作によ り、すべての依存関係はそのオブジェクトで記録される順に出力さ れます。 example% ldd main libelf.so.1 => /lib/libelf.so.1 libnsl.so.1 => /lib/libnsl.so.1 libc.so.1 => /lib/libc.so.1 実行時にこのオブジェクトを使用した場合のレイジー読み込み動作 は、 -L オプションを使用することによって有効にできます。この モードの場合、レイジーな依存関係が読み込まれるのは、レイジー オブジェクト内で定義されているシンボルが参照されたときです。 したがって、-L オプションを -d および -r オプションと組み 合 わせて使用すると、即時参照とレイジー参照のそれぞれを満たすの に必要な依存関係を調べることができます。 example% ldd -L main example% ldd -d main libc.so.1 => /lib/libc.so.1 example% ldd -r main libc.so.1 => /lib/libc.so.1 libelf.so.1 =>/lib/libelf.so.1 この例の場合、出力される依存関係の順序は、オプションなしで実 行した ldd の場合と異なります。また、-r オプションを使用した 場合とも異なります。レイジー依存関係に対する参照は、実行中の プログラムと同じ順序では発生しません。 レイジー読み込みを調べると、参照を満たす必要のないオブジェク ト も 明らかになります。このようなオブジェクト (上記の例では libnsl.so.1) は、検査対象のオブジェクトを作成するために使 用 したリンク行から削除可能な候補です。 [初期化順序] 必要な依存関係が明示的に定義されていないオブジェクトでは、使 用 す るオプションによって、ldd によって表示される初期化セク ションの順序が異なる場合があります。次に、簡単な適用例を示し ます。 example% ldd -i main libA.so.1 =>./libA.so.1 libc.so.1 =>/lib/libc.so.1 libB.so.1 =>./libB.so.1 init object=./libB.so.1 init object=./libA.so.1 init object=/lib/libc.so.1 再配置が適用されると、初期化セクションの順序は次のようになり ます。 example% ldd -ir main ......... init object=/lib/libc.so.1 init object=./libB.so.1 init object=./libA.so.1 この場合、libB.so.1 は /usr/lib/libc.so.1 の関数を参照 し ま す。ただし、このライブラリに明示的な依存関係はありません。再 配置が検出されてはじめて、依存関係が確立され、その結果、この 暗黙的な依存関係により初期化セクションのソート順序が影響を受 けます。 通常、アプリケーションの実行時に設定される初期化セクションの ソート順序は、ldd に -d オプションを指定した場合と同じです。 最適な順序が得られるのは、すべてのオブジェクトでそれぞれの依 存関係が完全に定義されている場合です。動的オブジェクトの作成 が望ましい場合は、ld(1) でオプション -zdefs および -zignore を使用します。 1 つ以上の動的オブジェクトが相互に参照する場合には、循環型依 存関係が生じる可能性があります。循環型依存関係は、各依存関係 固有のソート順序を確立できないので、避けなければなりません。 オブジェクトファイルを静的に分析する方が望まし い 場 合 は、 dump(1) や elfdump(1) などのツールを使用して依存関係を調べる ことができます。 【ファイル】 /usr/lib/lddstub 共有オブジェクトの依存関係を検査する ために読み込まれた擬似実行可能ファイ ル 【属性】 次の属性については、attributes(5) のマニュアルページを参照し てください。 ____________________________________________________________ | 属性タイプ | 属性値 | |_____________________________|_____________________________| | 使用条件 | SUNWtoo | |_____________________________|_____________________________| 【関連項目】 adb(1), crle(1), dump(1), elfdump(1), ld(1), ld.so.1(1), pvs(1), truss(1), dlopen(3DL), attributes(5) リンカーとライブラリ 【診断】 ldd は共有オブジェクトのパス名の記録を標準出力に書き込 み ま す。シンボルの解決問題に関する任意選択のリストは、標準エラー 出力に書き込まれます。filename が実行可能ファイルまたは共 有 オブジェクトではない場合、あるいは、読み取り用にオープンでき ない場合、ゼロ以外の終了ステータスが返されます。 【注意事項】 ldd は、dlopen(3DL) を使用して明示的に接続された共有オブジェ クトを表示しません。 共有オブジェクトで -d または -r オプションを使用すると、誤解 を生じるような結果が出力される場合があります。ldd は共有オブ ジェクトにおける「最悪の場合」の解析を行います。しかし実際に は、未解決として報告されたシンボルでも、その一部または全部が 共有オブジェクトを参照する実行可能ファイルによって解決される こ と が あ り ま す。 実 行時リンカーのプリロードメカニズム (LD_PRELOAD) を使用すると、検査対象のオブジェクトに依存関 係 を追加できます。 ldd は実行時リンカーと同じアルゴリズムを使用して、共有 オ ブ ジェクトを見つけます。 |
|