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