基于OpenSTLinux的Yocto项目libstd-rs编译失败求助
解决Yocto Kirkstone构建libstd-rs_1.59.0编译失败问题
问题场景
基于STM32MP157的emsbc-argon自定义开发板进行Yocto项目开发,选用Kirkstone版本,厂商提供的板级支持包(BSP)为Dunfell版本,发行版采用OpenSTLinux。构建配置如下:
Build Configuration: BB_VERSION = "2.0.0" BUILD_SYS = "x86_64-linux" NATIVELSBSTRING = "universal" TARGET_SYS = "arm-emt_eglfs-linux-gnueabi" MACHINE = "emsbc-argon" DISTRO = "emt-eglfs" DISTRO_VERSION = "1.3" TUNE_FEATURES = "arm vfp cortexa7 neon vfpv4 thumb callconvention-hard" TARGET_FPU = "hard" DISTRO_CODENAME = "kirkstone" ACCEPT_EULA_emsbc-argon = "1" GCCVERSION = "11.%" PREFERRED_PROVIDER_virtual/kernel = "linux-stm32mp-argon" meta-emtrion-emsbc-argon meta-emtrion = "<unknown>:<unknown>" meta = "HEAD:f7766da462905ec67bf549d46b8017be36cd5b2a" meta-oe meta-initramfs meta-multimedia meta-python meta-networking meta-webserver meta-filesystems meta-perl = "HEAD:05dcac98473402d87e0af73bbc2c5a6a840abe93" meta-qt5 = "HEAD:5b71df60e523423b9df6793de9387f87a149ac42" meta-st-stm32mp = "HEAD:ca501bd7dbe023682903ceedddaacd940b0898f4" meta-st-openstlinux = "HEAD:cb736b403d0fef2a02390695613b6b4bb13ca1b7" meta-gnome meta-xfce = "HEAD:05dcac98473402d87e0af73bbc2c5a6a840abe93"
已添加两个自定义层到bblayers.conf,未主动包含任何libstd-rs相关配方,执行bitbake -c cleanall和cleansstate清理构建状态后,仍出现如下错误:
Summary: 1 task failed: ERROR: Task (/home/hico/work/emtrion/argon-yocto/test-st-yocto/layers/openembedded-core/meta/recipes-devtools/rust/libstd-rs_1.59.0.bb:do_compile) failed with exit code '1'
解决思路
1. 定位libstd-rs的依赖触发源
libstd-rs是Rust标准库,不会凭空被构建,必然是某个配方间接依赖了Rust。执行以下命令生成依赖图,找出触发它的配方:
bitbake -g <你的镜像名称>
生成后查看pn-buildlist文件,搜索libstd-rs即可追踪到完整的依赖链,明确是哪个组件引入了Rust依赖。
2. 修复跨版本BSP兼容性问题
厂商BSP基于Dunfell,而你使用Kirkstone,两者的工具链、组件版本差异可能是核心问题:
- 检查
meta-emtrion-emsbc-argon和meta-emtrion层中是否存在硬编码的Rust版本、工具链配置,比如强制指定旧版Rust,导致与Kirkstone自带的Rust 1.59.0冲突。 - 优先尝试获取厂商提供的Kirkstone版本BSP;如果没有,手动适配:对比Dunfell与Kirkstone的
meta-st-stm32mp、meta-st-openstlinux层差异,调整BSP中的内核配置、设备树、工具链相关配方,确保与Kirkstone的基础层兼容。
3. 调整Rust编译的目标架构与工具链配置
针对Cortex-A7的STM32MP157,检查并调整以下配置:
- 在
local.conf中明确指定Rust目标三元组,匹配你的硬件和工具链:RUST_TARGET = "armv7-unknown-linux-gnueabihf" - 修正GCC版本配置,当前
GCCVERSION = "11.%"过于模糊,指定具体版本以确保与Rust 1.59.0兼容,比如:GCCVERSION = "11.3%"
4. 排除自定义层的干扰
临时注释bblayers.conf中的自定义层,重新构建。如果问题消失,再逐个恢复自定义层,排查其中是否有配方间接引入了Rust依赖(比如某些现代组件默认启用Rust支持)。
5. 彻底清理构建环境
除了常规清理命令,尝试更彻底的重置:
- 删除整个构建目录,重新执行
source oe-init-build-env生成全新配置后再构建。 - 删除
downloads目录下的Rust相关包,强制重新下载兼容版本的源码包。
内容的提问来源于stack exchange,提问作者radium88
相关产品推荐
相关产品推荐

