同じDebianパッケージ内の共有ライブラリ間の依存関係

同じDebianパッケージ内の共有ライブラリ間の依存関係

複数の共有ライブラリを含むパッケージを作成したいとします。このパッケージにはおよびがlibfoo含まれています。今の表記法を使うと想像してみてください。このようにコンパイルすると、すべてが正常です。liba.so.1libb.so.1liba.so.1libb.so.1

cc -shared -fPIC -Wl,-soname,libb.so.1 -o libb.so.1 libb.c
cc -shared -fPIC -Wl,-soname,liba.so.1 -o liba.so.1 liba.c libb.so.1

しかし、これにはいくつかの追加作業が必要です(依存関係を手動で把握してmakefileにエンコードする必要がありますが、sconsはこの操作を自動的には実行しないようです)。単純なメソッドをコンパイルすると、興味深い問題が発生します。

cc -shared -fPIC -Wl,-soname,libb.so.1 -o libb.so.1 libb.c
cc -shared -fPIC -Wl,-soname,liba.so.1 -o liba.so.1 liba.c

これはヘッダーには表示されず、liba.so.1Debianパッケージをビルドすると次のメッセージが表示されます(この手順は時間がかかります)。libb.so.1DT_NEEDEDobjdump -p

dh_shlibdeps
   dpkg-shlibdeps:警告:debian/libfoo1/usr/lib/liba.so.1で使用されているシンボルbは、どのライブラリでも見つかりません。

これはシンボルbがに定義されているために発生しますlibb.so.1が、dpkg-shlibdepsこれを知る方法はありません。

ここには実際の問題がないようです。実際のバイナリにはとlibaaslibbがあり、両方がDT_NEEDED実行時にロードされます。それから数年が経ちました。この問題は、正しくクリーンに構築された Debian パッケージを作成しようとした場合にのみ発生します。

この問題をどのように解決するのですか? (しなければならない私はこの問題を解決しましたか? )このライブラリは実際には(TM)同じDebianパッケージになければなりません。 (ボーナスポイントの場合は循環依存関係を解決します。つまり、libbシンボルも使用しますliba。)

ベストアンサー1

おすすめ記事