基于openUBMC 25.09的版本,在本地构建高版本libmcpp组件,bingo build能运行通过,但是conan create . 和 conan create . –build=missing 均报错,无法完成安装:
依赖的库 本地也能查到,但是在安装的时候确提示没有这些组件?这个该如何解决?
之前还尝试过将conan2的所有缓存组件包都删除掉,重新在manifest目录下运行bingo build,然后再本地构建libmcpp组件,问题还是依旧
基于openUBMC 25.09的版本,在本地构建高版本libmcpp组件,bingo build能运行通过,但是conan create . 和 conan create . –build=missing 均报错,无法完成安装:
依赖的库 本地也能查到,但是在安装的时候确提示没有这些组件?这个该如何解决?
之前还尝试过将conan2的所有缓存组件包都删除掉,重新在manifest目录下运行bingo build,然后再本地构建libmcpp组件,问题还是依旧
答案内容由AI生成,仅供参考:
| 问题 | 原因 | 建议解决方案 |
|---|---|---|
conan create 报错 stat: path is NoneType |
boost 配方中未定义 1.87.0.b003 的 sources |
检查并补全 conandata.yml |
conan list 能查到但构建失败 |
缓存中只有元数据,无有效源码 | 清除 source 目录后重拉 |
bingo build 成功但 conan create 失败 |
bingo 使用预构建包,避开 source() |
使用 --build=never |
| 构建过程拉取失败 | 远程地址 conan_1/ 不可达 |
更换为 bmc_sdk_25.09 远程 |
| Conan 2.x 类型检查严格 | 变量未判空导致崩溃 | 升级或修复组件配方 |
conan create 构建 libmcpp 组件报错的分析与解决方案根据您提供的错误日志和上下文信息,本文将系统性地分析在基于 openUBMC 25.09 版本中使用 conan create 命令构建 libmcpp 组件时出现的错误,并提供针对性解决方案。
您在本地尝试构建 libmcpp 组件时执行了如下命令:
conan create .
conan create . --build=missing
报错内容为:
boost/1.87.0.b003@openubmc/stable: Error in source() method, line 29
git.fetch_commit(
TypeError: stat: path should be string, bytes, os.PathLike or integer, not NoneType
同时发现:
conan list 可查到 boost, huawei_secure_c, json, liblogger, libsomp, skynet 等依赖项。bingo build 命令可以成功运行。bingo build)仍无法解决 conan create 报错。bingo build 成功而 conan create 失败的原因bingo build 是一个高层级构建入口,它封装了完整的构建流程,包含:
manifest.yml 文件中的依赖。source() 阶段,直接使用二进制缓存)。而 conan create . 是针对单个组件的手动构建命令,其行为更严格:
conanfile.py 中定义的 source()、build()、package() 等生命周期方法。boost)在执行 source() 时需要从 Git 拉取源码,则必须确保配置正确且网络可达。
关键区别:
bingo build可能使用的是远程二进制包或已预构建的依赖,而不会触发source()阶段;而conan create在特定条件下会强制进入source()阶段,导致boost的git.fetch_commit()出错。
TypeError: stat: path should be ... not NoneType该错误出现在 boost/1.87.0.b003@openubmc/stable 的 source() 方法中,调用 git.fetch_commit() 时传入了 None 作为路径参数。
这说明:
git.fetch_commit() 所依赖的路径变量未正确初始化。self.conan_data["sources"] 中缺少对应版本 "1.87.0.b003" 的源码地址配置,导致返回 None。os.stat() 或类似操作时,对 None 进行了 stat 操作,引发异常。
根本原因:
Conan 配方(recipe)中未定义 boost/1.87.0.b003 的源码位置信息,导致 source() 函数无法获取有效路径。
conan list 能查到 boost?conan list 显示的是本地 Conan 缓存中的“已知”包元数据(元信息),包含:
但它 不保证源码已就绪或可构建。尤其当缓存仅有 package 或 metadata,但 source 文件夹损坏或缺失时,conan create 仍会尝试重新拉取源码,从而触发上述错误。
openUBMC 25.09 已切换至 Conan 2.x 构建系统,其 conanfile.py 的语法和逻辑与 1.x 存在差异:
| 项目 | Conan 1.x | Conan 2.x |
|---|---|---|
| 获取 sources | self.conan_data["sources"][self.version] |
必须严格校验是否存在 |
git.fetch_commit() |
容错较强 | 强类型检查,路径不可为 None |
| 构建缓存路径 | ~/.conan/data |
~/.conan2/p/... |
因此:旧版配方若未适配 Conan 2.x 的严格类型检查,极易在 source() 阶段报错。
boost/1.87.0.b003 在 conan_data 中有源码定义检查 boost 组件的 conanfile.py 或配方文件中是否定义了 1.87.0.b003 的 sources:
打开 boost 的 Conan 配方文件(通常在 .conan2/p/boostb19bbb4dd3e0d/export/conanfile.py),查找:
def source(self):
git = Git(self)
git.fetch_commit(
url=self.conan_data["sources"][self.version]["url"],
commit=self.conan_data["sources"][self.version]["commit"]
)
确认 conandata.yml 是否包含该版本定义:
查找文件路径如:
~/.conan2/p/boostb19bbb4dd3e0d/export/conandata.yml
检查是否存在:
sources:
"1.87.0.b003":
url: "https://github.com/boostorg/boost.git"
commit: "abc123..."
如果不存在,则需添加或升级配方。
source() —— 使用 --build=never 或预构建二进制如果您不需要重新编译依赖(如 boost),可让 Conan 直接使用缓存中的包,避免进入 source() 阶段。
建议命令:
conan create . --build=never
或仅重新构建当前组件,其余依赖强制用已安装包:
conan create . --build=libmcpp
这样即使
boost的source()有缺陷,也不会触发错误。
conandata.yml 补全缺失版本(临时修复)如果确认 boost/1.87.0.b003 的 Git 信息,可手动添加:
sources:
"1.87.0.b003":
url: "https://github.com/boostorg/boost.git"
commit: "d1b7e3a9c8f..." # 替换为实际 commit
然后重试构建:
conan create .
注意:此方式仅作临时调试之用,不推荐长期使用,应由官方配方维护者更新。
有时本地源码文件夹损坏(如“corrupted source folder”提示所示),会导致 source() 失败。
执行以下操作:
# 删除 boost 的 source 目录
rm -rf ~/.conan2/p/boostb19bbb4dd3e0d/s/
# 强制重新安装依赖
conan install boost/1.87.0.b003@openubmc/stable --build=missing
再尝试构建 libmcpp。
参考上下文知识库,openubmc_dev 的远程地址为:
https://conan.openubmc.cn/conan_1/
但该地址已被报告为不可访问,可能导致依赖下载失败。
检查并修正远程地址:
conan remote list
若显示:
openubmc_dev: https://conan.openubmc.cn/conan_1/ [Verify SSL: False, Enabled: True]
应修改为正确的仓库地址(如 bmc_sdk_25.09):
conan remote remove openubmc_dev
conan remote add openubmc_sdk https://conan.openubmc.cn/bmc_sdk_25.09
| 问题 | 原因 | 建议解决方案 |
|---|---|---|
conan create 报错 stat: path is NoneType |
boost 配方中未定义 1.87.0.b003 的 sources |
检查并补全 conandata.yml |
conan list 能查到但构建失败 |
缓存中只有元数据,无有效源码 | 清除 source 目录后重拉 |
bingo build 成功但 conan create 失败 |
bingo 使用预构建包,避开 source() |
使用 --build=never |
| 构建过程拉取失败 | 远程地址 conan_1/ 不可达 |
更换为 bmc_sdk_25.09 远程 |
| Conan 2.x 类型检查严格 | 变量未判空导致崩溃 | 升级或修复组件配方 |
# 1. 确保远程正确
conan remote add openubmc_sdk https://conan.openubmc.cn/bmc_sdk_25.09 true
# 2. 清除潜在损坏缓存(可选)
rm -rf ~/.conan2/p/boost*/s/
# 3. 尝试仅构建本组件,不重建依赖
conan create . --build=libmcpp
# 4. 若仍失败,尝试不构建任何依赖
conan create . --build=never
如上述方案仍无法解决,请联系 openUBMC SDK 维护团队 更新 boost 配方以支持 1.87.0.b003 版本。
相关链接:
构建成功后会默认缓存到.conan2/p/目录下,组件的构建流程文档说得比较清楚了,已解决。