You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决do_prepare_recipe_sysroot阶段的yaml-cpp包冲突问题?

解决Yocto中meta-tegra-community(DeepStream 6.2)与ROS2 Galactic的yaml-cpp依赖冲突问题

解决思路

既然DeepStream 6.2硬依赖yaml-cpp-060,修改它的依赖行不通,那直接让ROS2 Galactic的所有组件都用yaml-cpp-060替代默认的yaml-cpp_0.6.2,利用Yocto的包优先级配置实现,同时保证两者的依赖链正常工作。

具体操作步骤

  • 全局指定yaml-cpp的首选提供者
    在自定义层的conf/local.conf或者层的conf/distro/include/下的配置文件中添加以下内容:
# 强制所有需要yaml-cpp的包使用yaml-cpp-060
PREFERRED_PROVIDER_yaml-cpp = "yaml-cpp-060"
PREFERRED_PROVIDER_yaml-cpp-dev = "yaml-cpp-060"
PREFERRED_PROVIDER_yaml-cpp-staticdev = "yaml-cpp-060"

这会让Yocto解析依赖时优先选择yaml-cpp-060版本,覆盖ROS2原本的yaml-cpp_0.6.2。

  • 适配ROS2包的依赖声明
    部分ROS2包可能硬写了yaml-cpp的依赖名称,需要用.bbappend文件修正:
  1. 找到ROS2 Galactic中依赖yaml-cpp的recipes(比如ament_cmake_yaml_cpp、rcl_yaml_param_parser等)。
  2. 在自定义层中创建对应包的.bbappend文件(比如ament_cmake_yaml_cpp_*.bbappend),添加:
DEPENDS_remove = "yaml-cpp"
DEPENDS_append = "yaml-cpp-060"
# 如果用到pkgconfig,同步替换
PKGCONFIG_remove = "yaml-cpp"
PKGCONFIG_append = "yaml-cpp-060"

把ROS2包的编译依赖从yaml-cpp切换到yaml-cpp-060。

  • 屏蔽冲突的原yaml-cpp包
    为彻底避免冲突,在local.conf中添加BBMASK屏蔽原yaml-cpp_0.6.2的recipe:
BBMASK += ":yaml-cpp_0.6.2.bb:"
  • 验证库兼容性
    yaml-cpp-060的库文件名是libyaml-cpp.so.0.6,和ROS2原本用的yaml-cpp_0.6.2的库文件名完全一致,编译链接时不会出现找不到库的问题。可以提前检查yaml-cpp-060的pkgconfig文件是否安装到${STAGING_DIR_HOST}/usr/lib/pkgconfig/,确保ROS2包能正常找到它。

验证构建

完成配置后,重新运行构建命令:

bitbake xxx-xxxx-core-v0.1.3-unstable

检查是否还存在文件冲突错误,后续可验证DeepStream和ROS2的功能是否正常运行。

内容的提问来源于stack exchange,提问作者Bonggyu Choi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:33:31