参考资料
@Philtell ROS功能包打包生成deb安装包 遇到 dpkg-shlibdeps: error: no dependency information found for 问题
问题描述
在这个ros包中有一个依赖是Paho-mqtt-cpp, 这个包在github上是以源码形式存在的, 因此需要在客户端上进行手动编译与下载, 这就导致在进行打包时dh_shlibdeps
无法自动找到他相关的依赖, 因此无法完成deb包的生成, 即使是按照 Paho-mqtt-cpp官方的指南, 将paho-mqtt-cpp打包成paho-mqtt-cpp.deb再进行安装也是无法完成依赖的自动添加, 因此无法完成deb包的生成
解决
按照@Philtell的指南ROS功能包打包生成deb安装包 遇到 dpkg-shlibdeps: error: no dependency information found for 问题, 在打包时, 手动添加参数, 跳过该包的依赖就可以解决问题, 成功打包
注:
打包成功后, paho-mqtt-cpp是无法被正确安装的, 因此在需要安装ROS包的机器上需要首先下载与安装paho-mqtt-cpp, 否则即使安装了这个包, 在执行时也会出现问题
过程
cd 包名 #这里要与package.xml同级
bloom-generate rosdebian
sudo vim debian/rules
这是生成的 debian/rules
绝对路径为 包名/debian/rules
# 自动生成的override_dh_shlibdeps, 这个会自动处理相关包的依赖, 就会导致无法找到paho-mqtt-cpp
override_dh_shlibdeps:
# In case we're installing to a non-standard location, look for a setup.sh
# in the install tree that was dropped by catkin, and source it. It will
# set things like CMAKE_PREFIX_PATH, PKG_CONFIG_PATH, and PYTHONPATH.
if [ -f "/opt/ros/noetic/setup.sh" ]; then . "/opt/ros/noetic/setup.sh"; fi && \
dh_shlibdeps -l$(CURDIR)/debian/ros-noetic-mqtt-driver//opt/ros/noetic/lib/
这个是修改后的
# 修改后的override_dh_shlibdeps, 这个会自动忽略缺少的包
override_dh_shlibdeps:
# 使用自定义参数运行 dh_shlibdeps
dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info -l$(CURDIR)/debian/ros-noetic-mqtt-driver//opt/ros/noetic/lib/
参数分析
-l$(CURDIR)/debian/包名(可以在debian/找到一个ros-版本开头的包名)//opt/ros/(ros版本号)/lib/