Windows下使用b2交叉编译Boost到ARM平台报错求助
解决Windows下Boost交叉编译ARM平台的"arm in arm is not a number"错误
问题根因
错误提示“arm in arm is not a number”是因为Boost.Build解析user-config.jam时,误将你配置里的arm当作编译器版本号,试图把它转成数字格式导致失败——using gcc的语法里第二个参数是版本号,不是别名。
修复方案
1. 修正user-config.jam配置(推荐)
把配置里的版本号位置留空,或者填入交叉编译器的实际版本号(可通过arm-linux-gnueabi-g++ -v查看):
# 写法1:留空版本号,直接指定编译器 using gcc : : arm-linux-gnueabi-g++ ; # 写法2:填入真实版本号(比如从编译输出来的4.9、7.5等) using gcc : 7.5 : arm-linux-gnueabi-g++ ;
然后执行编译命令:
b2 toolset=gcc target-os=linux address-model=32
(加address-model=32是明确告诉Boost目标是32位ARM,避免架构识别混乱)
2. 正确使用工具集别名
如果你需要用arm作为工具集别名区分不同编译器,调整命令的写法,让Boost正确识别别名而非版本号:
保持你的user-config.jam不变:
using gcc : arm : arm-linux-gnueabi-g++ ;
执行b2时用完整的工具集标识:
b2 toolset=gcc-arm target-os=linux address-model=32
3. 规避PATH问题,直接指定编译器路径
如果怀疑PATH配置有隐性问题,在user-config.jam里写编译器的绝对路径(Windows路径注意用正斜杠或双反斜杠):
using gcc : : C:/DS-5/compiler/bin/arm-linux-gnueabi-g++.exe ;
再执行b2 toolset=gcc target-os=linux即可。
额外验证步骤
- 先单独跑
arm-linux-gnueabi-g++ -v,确认编译器在当前终端能正常调用 - 确保已经执行过
bootstrap.bat生成b2工具 - 建议在MSYS2/MinGW终端里编译,比原生CMD更少环境变量问题
内容的提问来源于stack exchange,提问作者Siver
相关产品推荐
相关产品推荐

