Ubuntu

dpkg-shlibdeps 不提供版本資訊

  • February 1, 2022

我正在創建一個依賴於 ROS 包 ros-noetic-moveit-core 的包。更具體地說,它包含一個連結到libmoveit_robot_model.so.

libmoveit_robot_model.so是 ia 的符號連結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.7將被替換為libmoveit_robot_model.so.1.1.8(例如),我的包將不再連結,而 dpkg 看不到衝突。

如何確保我的包正確告知其依賴項?我看到兩個解決方案:

  • 找到一種在連結時不包含版本後綴的方法,以便我的包與多個版本的 MoveIt! 兼容,但我不喜歡這個解決方案(特別是因為 MoveIt! 不提供符號文件或事件與主要版本的符號連結後綴,如libmoveit_robot_model.so.1)。
  • 想辦法讓 dpkg-shlibdeps 找到 MoveIt 的使用版本!所以我的包與 MoveIt! 一起升級。

如果是來自 MoveIt 的錯誤!packager,他們能做什麼,在等待包裹修復的時候我能做什麼?

關於 MoveIt! 的更多資訊:

  • 我正在使用這個 .deb 包
  • 沒有*.symbols*文件。
  • 文件 /var/lib/dpkg/info/ros-noetic-moveit-core.shlibs 包含以下內容:
#...
libmoveit_robot_model 1.1.7 ros-noetic-moveit-core
#...

這確實是一個打包問題(並且可以說是一個庫定義問題)。在我開始之前,您可以執行以下操作來修復它:您可以shlibsdebian/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它自己,它應該將其庫放在一個包中,該包的名稱反映了包的 soname。如果包的每個版本都不向後兼容,則該名稱應包括完整版本(因此在包名稱及其元數據中重複)。如果版本 1.1.8 應該是 1.1.7 的替代版本,那麼 soname 應該停止在 1.1 甚至 1。Debian 政策的相關章節,描述了不僅與 Debian 相關的最佳實踐,是章節在共享庫上此腳註提供了一個命令來計算庫的適當包名稱。

引用自:https://unix.stackexchange.com/questions/688840