基于Buildroot构建OpenThread时出现循环依赖错误求助
在Buildroot中为BeagleBone Black构建OpenThread边界路由器时遇到CMake循环依赖错误
错误信息
CMake Error: The inter-target dependency graph contains the following strongly connected component (cycle): "openthread-ftd" of type SHARED_LIBRARY depends on "tcplp-ftd" (weak) "tcplp-ftd" of type STATIC_LIBRARY depends on "openthread-ftd" (weak) At least one of these targets is not a STATIC_LIBRARY. Cyclic dependencies are allowed only among static libraries. CMake Generate step failed. Build files cannot be regenerated correctly. make: *** [package/pkg-generic.mk:273: /var/home/joshuajohn/Workspaces/Legion/buildroot/output/build/openthread-thread-reference-20230710/.stamp_configured] Error 1
环境与配置说明
- Buildroot配置为同时构建静态库与共享库,涉及的
openthread-ftd(共享库)和tcplp-ftd(静态库)均来自OpenThread边界路由器子模块 - 使用OpenThread官方提供的BeagleBone Black默认配置,路径为
examples/platforms/beagleboneblack/default - 采用CMake搭配Ninja作为构建后端,与官方支持的构建方式一致
- 未使用OpenThread官方部署脚本,目标是通过Buildroot构建系统深入学习
问题原因分析
- CMake依赖规则限制:CMake仅允许静态库之间存在循环依赖,本次场景中共享库
openthread-ftd与静态库tcplp-ftd形成弱依赖循环,直接违反了CMake的依赖检测逻辑。 - Buildroot全局配置与OpenThread默认构建的冲突:OpenThread官方默认构建流程可能未同时启用静态+共享库的组合模式,Buildroot的全局强制双库配置触发了原本未暴露的循环依赖问题。
- 弱依赖的解析差异:单库构建模式下,CMake可能不会完整解析弱依赖链;但双库模式下,依赖关系被完整遍历,循环依赖被检测出来并报错。
解决思路
- 调整Buildroot库类型配置:在
make menuconfig中找到Library type选项,暂时只选择静态库或共享库其中一种,绕过循环依赖限制。 - 修改OpenThread的CMake配置:
- 将
tcplp-ftd改为共享库,使两个库同为共享库(CMake允许共享库循环依赖,但需确保编译器支持) - 提取两个库的公共代码为独立的静态库,打破现有循环依赖链
- 将
- 更新OpenThread版本:检查OpenThread 20230710版本是否存在已知的循环依赖问题,尝试升级到更高版本或应用社区提供的相关补丁。
内容的提问来源于stack exchange,提问作者Joshua John
相关产品推荐
相关产品推荐

