Provided by: dpkg-dev_1.17.5ubuntu5.8_all bug

名前

       dpkg-shlibdeps - 共有ライブラリの substvar 依存関係を生成する

書式

       dpkg-shlibdeps [option...] [-e]executable [option...]

説明

       dpkg-shlibdeps    は、引数として与えられた実行バイナリと共有ライブラリとの依存関係を算出す
       る。依存関係は変数ファイル debian/substvarsshlibs:dependency-field  という名前の変数と
       して追加される。dependency-field  は依存関係にあるフィールド名であり、それ以外のshlibs: か
       らはじまる変数はファイルから削除される。

       dpkg-shlibdeps には依存関係情報を生成する情報源として symbols ファイルおよび shlibs ファイ
       ルの 2 つを使用する。dpkg-shlibdeps は、解析する各バイナリについてリンクするライブラリの一
       覧を確認した上で、各ライブラリを、symbols ファイルもしくは shlibs ファイル (前者が存在しな
       いか、debian/shlibs.local に適切な依存関係が含まれている場合) から検索する。両ファイルとも
       に、ライブラリのパッケージによって提供され、各々 /var/lib/dpkg/info/package.symbols および
       /var/lib/dpkg/info/package.shlibs  に存在する。パッケージ名は 2 段階で識別される。最初にシ
       ステムにあるライブラリが検索され (ld.so  が使用するのと同じディレクトリが検索される)、つい
       で dpkg -S library-file を用いてライブラリを提供するパッケージが検索される。

   シンボルファイル
       シンボルファイルにはライブラリがエクスポートしている各シンボルに関する最小の依存関係を提供
       するための詳細な依存関係情報が含まれる。スクリプトは、ライブラリパッケージに関連付けられた
       シンボルファイルを検索する際に、ファイルを確認する (最初にマッチしたものが使われる):

       debian/*/DEBIAN/symbols
              dpkg-gensymbols(1)   を実行した現在のビルド処理によって生成される共有ライブラリの情
              報。これらはライブラリがパッケージのビルドツリー内で見つかった場合のみ使われる。ビ
              ルドツリー内のシンボルファイルは、その他のバイナリパッケージのシンボルファイルに優
              先する。

       /etc/dpkg/symbols/package.symbols.arch

       /etc/dpkg/symbols/package.symbols
              システム全体に上書き適用される共有ライブラリの依存関係情報。arch は現在のシステムの
              アーキテクチャを示す (dpkg-architecture -qDEB_HOST_ARCH により取得される)。

       “dpkg-query --control-path package symbols” の出力
              Package-provided  shared  library  dependency  information.   Unless  overridden by
              --admindir, those files are located in /var/lib/dpkg.

       バイナリが使用するシンボルをスキャンしている際、dpkg-shlibdeps  は、各ライブラリが必要とし
       ている (最大の) 最小バージョンを記憶する。これにより、処理が完了した際に、使用する各ライブ
       ラリ毎に最小の依存関係を書き出すことが可能となる   (symbols   ファイルの情報が適切である場
       合)。

       As   a   safe-guard   measure,   a   symbols  file  can  provide  a  Build-Depends-Package
       meta-information field and dpkg-shlibdeps will extract the minimal version required by the
       corresponding  package in the Build-Depends field and use this version if it's higher than
       the minimal version computed by scanning symbols.

   shlibs ファイル
       shlibs ファイルは、ライブラリに直接 (シンボルを参照することなしに)  依存関係を設定する。こ
       れは時として必要以上に強力な場合もあるが、非常に安全かつ簡単に扱うことができる。

       ライブラリの依存関係は、幾つかのパスから検索される。対象のライブラリに対して最初に情報を提
       供したファイルの情報が用いられる。

       debian/shlibs.local
              パッケージのみに上書き適用される共有ライブラリの依存関係情報

       /etc/dpkg/shlibs.override
              システム全体に上書き適用される共有ライブラリの依存関係情報

       debian/*/DEBIAN/shlibs
              dpkg-shlibdeps を起動した現在のビルド処理によって生成された共有ライブラリの情報。こ
              れらはライブラリがパッケージのビルドツリー内で見つかった場合のみ使われる。ビルドツ
              リー内の shlibs ファイルはその他のバイナリパッケージの shlibs ファイルに優先する。

       “dpkg-query --control-path package shlibs” の出力
              Package-provided shared  library  dependency  information.   Unless  overridden  by
              --admindir, those files are located in /var/lib/dpkg.

       /etc/dpkg/shlibs.default
              システム全体に影響するデフォルトの共有ライブラリの依存関係情報

       展開された依存関係は直接適用される (重複が確認されたり、別のより強い依存関係が確認されたり
       したためフィルタされる場合を除く)。

オプション

       dpkg-shlibdeps は、オプションでない引数を、-eexecutable で指定された場合と同じく実行ファイ
       ル名として解釈する。

       -eexecutable
              Include  dependencies  appropriate for the shared libraries required by executable.
              This option can be used multiple times.

       -ldirectory
              Add directory to the list of directories to search  for  private  shared  libraries
              (since dpkg 1.17.0). This option can be used multiple times.

              Note:  Use  this  option  instead  of  setting LD_LIBRARY_PATH, as that environment
              variable is used to control the run-time linker and abusing it to  set  the  shared
              library paths at build-time can be problematic when cross-compiling for example.

       -ddependency-field
              制御ファイルの依存関係のためのフィールド  dependency-field に依存関係を追加する (こ
              のフィールドに記載した依存関係は shlibs:dependency-field 変数に設定される。

              -ddependency-field オプションは、次の -ddependency-field が現れるまで、このオプショ
              ンに続くすべての実行ファイルに適用される。dependency-field  のデフォルトは  Depends
              である。

              Pre-Depends, Depends,  Recommends,  Enhances,  Suggests  といった依存関係に関連する
              フィールドに、同一の       (代替パッケージを含む)      依存関係のエントリが現れた場
              合、dpkg-shlibdeps は自動的にもっとも重要な依存関係を示すもの以外、すべてのフィール
              ドから該当する依存関係を自動的に削除する。

       -pvarname-prefix
              変数名を  shlibs: から始まる代わりに varname-prefix: から始める。同様に、(shlibs:で
              はなく) varname-prefix: から始まる既存の変数が変数ファイルから削除される。

       -O[filename]
              Print substitution variable settings to standard output (or filename if specified),
              rather  than  being  added  to the substitution variables file (debian/substvars by
              default).

       -ttype 指定されたパッケージ形式にタグ付けされた共有ライブラリの依存情報を優先的に用い
              る。タグ付けされた情報が利用できなかった場合はタグ付けされていない情報が用いられ
              る。デフォルトのパッケージ形式は "deb" である。共有ライブラリの依存関係情報は、パッ
              ケージ形式の名称、コロン、空白文字を名前の先頭につけることで、パッケージ形式にタグ
              付けされる。

       -Llocal-shlibs-file
              debian/shlibs.local の代わりに local-shlibs-file から上書きする共有ライブラリの依存
              関係情報を読み取る。

       -Tsubstvars-file
              変数を substvars-file に書き込む。デフォルトは debian/substvars である。

       -v     冗長モードを有効にする。dpkg-shlibdeps の動作を示すためのメッセージが数多く表示され
              る。

       -xpackage
              package で指定したパッケージを生成された依存関係から除外する。これは  ELF  バイナリ
              (実行ファイルやライブラリのプラグイン) を提供するパッケージが同じパッケージに含まれ
              るライブラリを使用することによる自己依存関係を避ける際に有用である。このオプション
              を複数回設定することで、複数のパッケージを除外することができる。

       -Spackage-build-dir
              ライブラリを探索する際に、最初に package-build-dir 内を探索する。これは、ソースパッ
              ケージが flavor  を交えながら同じライブラリを何度もビルドする際に、指定されたバイナ
              リパッケージからの依存関係を取得したいといった場合に有用である。このオプションは複
              数回設定することができる。その場合、ここで指定した以外のバイナリパッケージの格納さ
              れたディレクトリを探索する前に、指定された順にディレクトリが探索される。

       --ignore-missing-info
              共有ライブラリが依存関係情報を提供しなかった際に失敗と見なさない。このオプションの
              使用は推奨しない。すべてのライブラリは、たとえ他のパッケージによって使用されていな
              い場合であっても、依存関係情報を(shlibs  ファイルまたはシンボルファイルによって) 提
              供すべきであるためである。

       --warnings=value
              valuedpkg-shlibdeps  によって出力される一連の警告をビットフィールドとして定義し
              たものである。ビット 0 (value=1) は "symbol sym used by binary found in none of the
              libraries" という警告を、ビット 1 (value=2)  は  "package  could  avoid  a  useless
              dependency"  という警告を、ビット  2  (value=4)  は  "binary  should  not be linked
              against library" という警告を有効にする。デフォルトの value は 3  であり、最初の  2
              つの警告がデフォルトで有効になり、最後の  1  つは無効となる。value  を 7 にすること
              で、すべての警告を有効にできる。

       --admindir=dir
              dpkg データベースの位置を変更する。デフォルトの位置は /var/lib/dpkg である。

       -?, --help
              利用方法を表示して終了する。

       --version
              バージョン情報を表示して終了する。

診断メッセージ

   Warnings
       dpkg-shlibdeps      が生成されたパッケージの各バイナリが使用する一連のシンボルを解析する際
       に、様々なケースで警告が発生する。これにより、パッケージの改良につながるヒントを得ることが
       できる。多くの場合、こうした改良はアップストリームのソースに直接影響する。重要度の高いもの
       から順に、発生しうる様々な警告を以下に示す:

       symbol sym used by binary found in none of the libraries.
              これは、シンボルがバイナリにリンクされたライブラリ内で見つからなかったことを示
              す。binary はほとんどの場合ライブラリであり、ビルド処理の中で別のライブラリにリンク
              される必要がある (リンカの -llibrary オプション)。

       binary contains an unresolvable reference to symbol sym: it's probably a plugin
              これは、シンボルがバイナリにリンクされたライブラリ内で見つからなかったことを示
              す。binary はほとんどの場合プラグインであり、シンボルは恐らくプラグインをロードする
              プログラムによって提供される。プラグインには    SONAME   を持たせないのがセオリーだ
              が、このバイナリはそれを持っているため、プラグインかどうかを明確に判別することがで
              きていない。ただし、このバイナリは一般的なディレクトリに配置されていないため、通常
              の共有ライブラリではないことがほぼ断定できている。バイナリが実際にプラグインであっ
              た場合は、この警告は無視すればよい。ただし、バイナリが実際にはライブラリである可能
              性もある。その場合、リンクするプログラムは RPATH を用いて、動的ローダにライブラリを
              発見させる。後者の場合、このライブラリは機能不全であり、修正が必要である。

       package could avoid a useless dependency if binary was not linked against library (it uses
       none of the library's symbols)
              library にリンクされた binaries  は、ライブラリによって提供されているシンボルをまっ
              たく使用していない。binaries に列挙されたすべてのバイナリを修正することで、このライ
              ブラリへの依存関係を外すことができる可能性がある  (実際に使用される別のライブラリに
              よって、同じ依存関係が生成されている場合を除く)。

       package could avoid a useless dependency if binaries were not linked against library (they
       uses none of the library's symbols)
              前述の警告と同一であるが、複数のバイナリが対象となっている。

       binary should not be linked against library (it uses none of the library's symbols)
              binary は不要なライブラリにリンクされている。これは問題ではないが、このライブラリを
              バイナリにリンクしないことで、若干のパフォーマンス向上が見込まれる。この警告は前述
              したものと同じ情報を提示しているが、解析したバイナリ全体に対するチェックではな
              く、個別のライブラリに対するチェックとなっている。

   Errors
       dpkg-shlibdeps  は、バイナリによって使用される公開ライブラリを発見できない場合や、ライブラ
       リに依存関係の情報 (shlibs ファイルやシンボルファイル)  が存在しない場合エラーとなる。公開
       ライブラリは SONAME があり、(libsomething.so.X という形態で) バージョン管理されている。(プ
       ラグインのような) 非公開ライブラリは  SONAME  を持つべきではなく、バージョン管理も不要であ
       る。

       couldn't find library library-soname needed by binary (its RPATH is 'rpath')
              The  binary uses a library called library-soname but dpkg-shlibdeps has been unable
              to find the library.  dpkg-shlibdeps creates a list  of  directories  to  check  as
              following:  directories  listed  in  the RPATH of the binary, directories listed in
              /etc/ld.so.conf, directories added by the -l  option,  directories  listed  in  the
              LD_LIBRARY_PATH  environment  variable,  and  standard  public  directories  (/lib,
              /usr/lib, /lib32, /usr/lib32, /lib64, /usr/lib64). Then it checks those directories
              in  the  package's  build tree of the binary being analyzed, in the packages' build
              trees indicated with the -S command-line option, in  other  packages'  build  trees
              that  contains  a  DEBIAN/shlibs  or  DEBIAN/symbols  file  and finally in the root
              directory.  If the library is not found in any of those directories, then  you  get
              this error.

              If  the  library  not found is in a private directory of the same package, then you
              want to add the directory with -l. If it's in another binary package  being  built,
              you  want  to  make  sure  that  the shlibs/symbols file of this package is already
              created and that -l contains the appropriate directory if it also is in  a  private
              directory.

       no dependency information found for library-file (used by binary).
              binary  が必要とするライブラリは、dpkg-shlibdeps によって library-file 内で発見され
              ているが、dpkg-shlibdeps     は該当ライブラリについての依存関係情報を発見できていな
              い。依存関係を発見するために、  dpkg-shlibdepsdpkg  -S  library-file によって
              Debian パッケージをライブラリに対応付け、さらに /var/lib/dpkg/info や様々なパッケー
              ジのビルドツリー (debian/*/DEBIAN/) にある shlibs や symbols ファイルのチェックを実
              施している。

              このエラーはライブラリパッケージの shlibs や symbols ファイルに問題があるか、ファイ
              ル自体が存在しない場合に発生する。これは、ライブラリが同じソースパッケージからビル
              ドされているが、shlibs  ファイルが未生成  (この場合  debian/rules  ファイルを修正し
              て、dpkg-shlibdeps 実行前に shlibs ファイルを生成するようにする必要がある) の場合に
              も発生する。RPATH に問題があり、ライブラリが正規化されていないパス名で発見され  (例
              えば、/usr/lib/libssl.so.0.9.8                                               ではな
              く、/usr/lib/openoffice.org/../lib/libssl.so.0.9.8  のような形で)、そのライブラリが
              どのパッケージにも対応付けられない場合にも発生する。この場合、dpkg-shlibdeps     は
              (realpath(3) を用いて) 正規名を確認するが、常に成功するとは限らない。問題を発生させ
              ないために、バイナリの RPATH を常に整理しておくことが推奨される。

              Calling  dpkg-shlibdeps  in  verbose  mode  (-v) will provide much more information
              about where it tried to find the dependency information. This might  be  useful  if
              you don't understand why it's giving you this error.

関連項目

       deb-shlibs(5), deb-symbols(5), dpkg-gensymbols(1)

翻訳者

       高橋  基信  <monyo@monyo.com>.  喜瀬 浩 <kise@fuyuneko.jp>.  関戸 幸一 <sekido@mbox.kyoto-
       inet.or.jp>.  鍋谷 栄展 <nabe@debian.or.jp>.  倉澤 望  <nabetaro@debian.or.jp>.   石川  睦
       <ishikawa@linux.or.jp>.       鵜飼      文敏      <ukai@debian.or.jp>.       中野     武雄
       <nakano@apm.seikei.ac.jp>.

翻訳校正

       Debian JP Documentation ML <debian-doc@debian.or.jp>.