【问题标题】:snapcraft of catkin workspace fails to find shared header filecatkin工作空间的snapcraft找不到共享头文件
【发布时间】:2018-04-08 14:43:06
【问题描述】:

我正在为 snapcraft 使用 catkin 插件。我根据需要在多个包的 ros 工作区中使用它。该工作区使用 catkin 工具构建。

但是,当使用 snapcraft 时,构建无法使用 CMakeLists.txt 中的 catkin_package() 声明找到应该在本地包之间共享的头文件

是否有任何已知原因导致此操作失败。因为这发生在使用 catkin 的包之间引用的许多头文件中

【问题讨论】:

  • 请注意,Catkin 插件使用的是 Catkin,而不是 Catkin Tools(尽管 Catkin Tools 插件刚刚完成并将在即将发布的版本中)。你能验证这个工作区是用 Catkin 构建的吗?
  • 我一定不明白catkin和catkin工具的区别。我使用'$ catkin build' 来构建工作区。这不是柳絮吗?
  • 我已经添加了未找到的头文件来安装,现在其他包可以找到它。似乎 snapcraft catkin 包没有像其他 catkin 调用那样构建开发空间?
  • 不,catkin tools 是一个测试版工具,旨在改进 Catkin,它是正常的 ROS1 构建系统。听起来这不是你的问题——我试图在我的回答中解释更多。

标签: catkin snapcraft


【解决方案1】:

ROS docs on snapcraft.iosnap tutorial on wiki.ros.org 都提到了这一点,尽管我已对前者提出以下澄清:

大多数 ROS 开发人员用完了devel 空间。结果,很容易忘记良好安装规则的重要性,即安装运行所需的包的每个组件或使用给定库所需的每个组件的规则。您正在构建的 Catkin 软件包必须具有良好的安装规则,否则 Snapcraft 将不知道将哪些组件放入 snap 中。确保安装了二进制文件、库、头文件、启动文件等。

任何包装方法都是如此。您必须有良好的安装规则。

【讨论】:

  • 我们使用安装的包来运行我们的机器,所以运行时所需的一切都在那里。然而,在我提到的实例中,构建依赖项通常使用开发空间。不使用开发空间来构建包的副产品是它们不会构建,并且 snapcraft 构建将是一个痛苦的过程,尽管安装中的内容是运行时使用所需的全部。
  • 抱歉,catkin 包一般都有构建和运行时依赖。有时,这些依赖项是同时构建的。在正常使用中,如果一个包依赖于另一个包中的标头进行构建。然后在运行时可能不依赖它,可能只是链接到共享库。这些依赖关系在构建期间在开发工作区中处理。但是,现在我想通过 snap 将我的堆栈部署给客户,并且我必须在运行时中包含仅在构建期间需要的人工制品(这些构建依赖项的标头)。这样做的成本很高。
  • 我不同意 ros 就是这样工作的。我将我的安装目录复制到我的机器人上,它可以工作。所以我的安装规范没有错。我不明白为什么 catkin 插件不能像普通的 catkin 工作区那样构建。将 --merge 添加到 catkin_make_isolated 会解决这个问题吗?
  • 恐怕我们不能在 cmets 中聊天,如果您想继续,我们应该转到 IRC。
猜你喜欢
  • 2019-06-13
  • 2021-04-12
  • 2015-08-04
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-18
相关资源
最近更新 更多