问题描述
ipmi_mgmt代码修改后按照文档无法进行编译,报错如下,目前这个开源组件是否可以编译进整包?
BMC社区版本用的26.06 组件版本是最新的1.0.40
修改这个组件是因为想用ipmbeth这个类,但是发现这一块代码没有实现,所以在这个组件新增了代码,但是目前发现这个组件无法重新编译。
参考组件文档编译报错如下:
Executing subproject libmcpp:mcdbus
mcdbus| Project name: mcdbus
mcdbus| Project version: 0.1.0
mcdbus| C++ compiler for the host machine: /home/workspace/ipmi_mgmt/.ccache_wrapper c++ (gcc 9.5.0 “c++ (Ubuntu 9.5.0-6ubuntu2.1) 9.5.0”)
mcdbus| C++ linker for the host machine: /home/workspace/ipmi_mgmt/.ccache_wrapper c++ ld.bfd 2.42
mcdbus| Run-time dependency skynet found: NO (tried pkgconfig and cmake)
subprojects/libmcpp/libraries/mcdbus/meson.build:31:2: ERROR: Problem encountered: mcdbus:use_old_shm=true 需要 skynet(仅由 conan 构建提供 ::shm 真实实现头), 当前 pkg-config 未找到 skynet。请改用 -Duse_old_shm=false(顶层同时 -Duse_shm=true), 或在 conan 环境下构建。
答案内容由AI生成,仅供参考:
解决方案
方案一:在完整的 Conan 构建环境中编译(推荐用于整包集成)
整包构建 (如使用 bingo build)会自动加载 profile 文件(通常由 bmc_sdk 或 manifest 提供),其中已声明 skynet 等公共工具依赖。此时编译不会出现该错误。
若您确认 ipmi_mgmt 组件已正确配置在 manifest/build/subsys/rc/bmc_core.yml 或对应 manifest.yml 的依赖列表中,整包构建应该能够正常编译该组件并集成到最终版本中 。
方案二:单独编译时按错误提示添加选项
在单独构建 ipmi_mgmt 时,可尝试添加 -Duse_old_shm=false 选项,暂时绕过 skynet 的强依赖(该选项会使用其他共享内存实现):
meson setup ... -Duse_old_shm=false
或者顶层同时使用 -Duse_shm=true(取决于具体构建命令)。
方案三:更新组件代码或使用最新分支
根据社区类似问题的处理经验(参见文档块6,用户 sam_h1973 遇到相同 skynet 未找到的错误,社区回复):
“建议更新组件代码后重试,最好使用最新正在合入的分支尝试构建。如问题依然存在,建议在对应代码仓提 issue。”
请确保您使用的 ipmi_mgmt(以及 libmcpp)版本与当前 OpenUBMC 26.06 的 manifest 和 bmc_sdk 完全匹配,并已拉取最新的代码分支。
总结 :您遇到的 skynet 缺失问题在整包构建中不会出现(因 profile 自动管理该依赖)。建议优先使用整包构建(bingo build)来集成 ipmi_mgmt;若需单独调试,可按错误提示添加编译选项或更新组件代码。
点击此处查看详细分析解答
根据您提供的错误日志和上下文信息,您遇到的编译问题主要源于 ipmi_mgmt 组件在单独构建时缺少 Conan 构建环境提供的 skynet 依赖 。以下是详细分析和建议。
错误原因分析
报错位置出现在子项目 libmcpp 下的 libraries/mcdbus/meson.build。
错误信息明确说明:mcdbus:use_old_shm=true 需要 skynet,但当前通过 pkg-config 找不到该库。
skynet 是 OpenUBMC 构建体系中由 profile 文件统一管理的公共构建工具依赖 (参见搜索结果中的《conan2.0适配说明》)。单独编译组件时,若未正确加载 profile(或未在 Conan 环境中运行),系统无法自动提供 skynet 的头文件和库路径,导致 pkg-config 查找失败。
解决方案
方案一:在完整的 Conan 构建环境中编译(推荐用于整包集成)
整包构建 (如使用 bingo build)会自动加载 profile 文件(通常由 bmc_sdk 或 manifest 提供),其中已声明 skynet 等公共工具依赖。此时编译不会出现该错误。
若您确认 ipmi_mgmt 组件已正确配置在 manifest/build/subsys/rc/bmc_core.yml 或对应 manifest.yml 的依赖列表中,整包构建应该能够正常编译该组件并集成到最终版本中 。
方案二:单独编译时按错误提示添加选项
在单独构建 ipmi_mgmt 时,可尝试添加 -Duse_old_shm=false 选项,暂时绕过 skynet 的强依赖(该选项会使用其他共享内存实现):
meson setup ... -Duse_old_shm=false
或者顶层同时使用 -Duse_shm=true(取决于具体构建命令)。
方案三:更新组件代码或使用最新分支
根据社区类似问题的处理经验(参见文档块6,用户 sam_h1973 遇到相同 skynet 未找到的错误,社区回复):
“建议更新组件代码后重试,最好使用最新正在合入的分支尝试构建。如问题依然存在,建议在对应代码仓提 issue。”
请确保您使用的 ipmi_mgmt(以及 libmcpp)版本与当前 OpenUBMC 26.06 的 manifest 和 bmc_sdk 完全匹配,并已拉取最新的代码分支。
关于“是否可编译进整包”
可以 。ipmi_mgmt 作为开源组件,在正确的整包构建流程中应能正常编译并集成。
需要确认 manifest.yml 或 bmc_core.yml 中已正确添加 ipmi_mgmt 的依赖声明(包括 user/channel),且 profile 文件配置正确(特别是 skynet 等工具链部分)。
可参考社区 new_app 组件集成时的做法(文档块3及搜索结果9):修改 subsys/rc/bmc_core.yml 和 product/BMC/<版本>/manifest.yml 的 tosupporte 字段,并确保 bmc_sdk 版本与 manifest 匹配。
补充建议
检查 Docker 环境是否完整配置了 bmc_sdk(包括 /opt/RTOS、/opt/hcc_arm64le 等目录),缺少这些会导致依赖环境不完整。
如果继续遇到 libmcpp 自身相关的依赖问题(如 pkgconfig 未找到 libmcpp),可能需要确认 subprojects/libmcpp.wrap 中的版本与 manifest 一致,并启用 fallback 依赖(默认禁用,需在 meson.build 或 profile 中开启)。
总结 :您遇到的 skynet 缺失问题在整包构建中不会出现(因 profile 自动管理该依赖)。建议优先使用整包构建(bingo build)来集成 ipmi_mgmt;若需单独调试,可按错误提示添加编译选项或更新组件代码。
yaoshun1
(yaoshun)
2026 年7 月 16 日 09:32
4
先拉取社区主干manifest执行bingo build -t install_sdk