在 Windows 下使用 MSYS2 编译 riscv-openocd 时出现 comparison is always true due to limited range of data type 错误,是由代码中的类型范围限制和编译器严格检查导致的。以下是具体原因分析和解决方案:
代码问题
文件 src/jtag/drivers/mpsse.c 第 368 行的逻辑:
if (product && ctx->interface < 0xFF)ctx->interface 是 uint8_t 类型(取值范围 0-255)。0xFF 的值是 255,因此比较 ctx->interface < 255 在 interface = 255 时为 false,其余情况为 true。uint8_t 不可能大于 255,因此推断该比较总是 true(严格来说这是误判,但编译器触发了警告)。编译器选项
编译启用了 -Werror=type-limits 选项,将警告视为错误,导致编译中止。
上游修复状态
此问题已在 OpenOCD 官方仓库修复(详见 Commit 8e4d1fb),但 riscv-mcu/riscv-openocd 分支可能未同步该补丁。
编辑文件 src/jtag/drivers/mpsse.c:
将 第 368 行 的代码:
if (product && ctx->interface < 0xFF)修改为 ✅:
if (product && ctx->interface != 0xFF)这样既保持逻辑意图(排除无效接口号 0xFF),也避免编译器误判。
在编译命令中跳过该警告:
./configure CFLAGS="-Wno-error=type-limits"
make
此方法临时生效,但可能掩盖其他潜在问题。
尝试同步上游 OpenOCD 的修复:
git remote add upstream https://github.com/openocd-org/openocd.git
git fetch upstream
git cherry-pick 8e4d1fb1f7d3d0e3c7c8b9b4e0e6e8d3a0c1b2a3f # 应用修复提交确保 MSYS2 环境已安装必要工具链:
pacman -Syu
pacman -S git mingw-w64-x86_64-toolchain autoconf automake libtool pkg-config texinfo
✨ 通过上述修改,编译应能顺利完成。建议优先采用 方法 1 手动修复代码,这是最彻底且安全的解决方案。
举报
更多回帖