dpkg-shlibdeps はバージョン情報を提供しません。

dpkg-shlibdeps はバージョン情報を提供しません。

ROSパッケージros-noetic-moveit-coreに依存するパッケージを作成しています。具体的には、へのリンクが含まれていますlibmoveit_robot_model.so

libmoveit_robot_model.soiaへのシンボリックリンクなlibmoveit_robot_model.so.1.1.7ので、libmoveit_robot_model.so.1.1.7私の共有ライブラリのNEEDED部分で終わります。

ただし、パッケージ化すると、dpkg-shlibdepsはros-noetic-moveit-coreバージョン情報なしでshlibs依存関係にのみ追加されます。

いつ移動するか! 1.1.6 からアップデートするときなど、最新バージョンにアップデートすると、ライブラリが置き換えられlibmoveit_robot_model.so.1.1.7libmoveit_robot_model.so.1.1.8たとえば)、パッケージがリンクされなくなり、dpkg に競合が表示されなくなります。

私のパッケージが依存関係を正しく渡すことをどうやって確認できますか? 2つの解決策があります。

  • 私のパッケージが複数のバージョンのMoveIt!と互換性があるようにリンクするときにバージョンサフィックスを含めない方法を見つけてください。しかし、このソリューションは気に入らない(特にMoveIt!が提供していないので)。シンボル)などのメジャーバージョンのサフィックスを含むファイルまたはイベントへのシンボリックリンクlibmoveit_robot_model.so.1
  • dpkg-shlibdepsが使用されているMoveItのバージョンを見つける方法を見つけてください!ムーブットで私のバッグがアップグレードされました!

MoveIt!の梱包機に欠陥がある場合はどうすればよいですか、パッケージが修正されるのを待っている間にどうすればよいですか?

MoveIt! に関する追加情報:

  • 使っていますこの.debパッケージ
  • いいえシンボル文書。
  • /var/lib/dpkg/info/ros-noetic-moveit-core.shlibs ファイルには次の内容が含まれています。
#...
libmoveit_robot_model 1.1.7 ros-noetic-moveit-core
#...

答え1

これは実際にパッケージングの問題(またはライブラリ定義の問題)です。始める前に問題を解決するためにできることは次のとおりです。パッケージのソースコードshlibsまたは。debian/shlibs.local/etc/dpkg/shlibs.override

libmoveit_robot_model 1.1.7 ros-noetic-moveit-core (>= 1.1.7), ros-noetic-moveit-core (<< 1.1.8)

パッケージをバージョン1.1.7のパッケージにバインドしますros-noetic-moveit-core

その部分では、ros-noetic-moveit-core名前がパッケージの名前を反映するパッケージにライブラリを置く必要があります。パッケージのすべてのバージョンが以前のバージョンと互換性がない場合は、名前にフルバージョンを含める必要があります。したがって、パッケージ名とそのメタデータで繰り返す必要があります。バージョン1.1.8が1.1.7の代替品と見なされる場合、sonameは1.1または1で停止する必要があります。 Debian ポリシーの関連セクションでは、Debian に関するベストプラクティスについて説明します。共有ライブラリに関する章この脚注ライブラリに適したパッケージ名を計算するコマンドを提供します。

関連情報