在64位Linux构建32位二进制文件遇Tuning错误求助
问题分析与解决方案
问题根源
你当前的配置存在架构不匹配的核心错误:目标机器是ARM架构的ti-am335x(DEFAULTTUNE为cortexa8thf-neon),但你将Multilib的lib32 tune设置为x86——这是x86架构的tune,和ARM目标架构完全不兼容,导致构建系统无法找到该tune对应的特征定义,从而触发报错。
Multilib的作用是为同一目标架构提供不同字长(如32位/64位)的支持,而非跨架构构建。
修复步骤
- 修改
local.conf中的Multilib配置,将lib32的tune替换为适合ARM 32位的选项,比如与当前DEFAULTTUNE匹配的ARM 32位tune:
MACHINE = "ti-am335x" require conf/multilib.conf MULTILIBS = "multilib:lib32" DEFAULTTUNE_virtclass-multilib-lib32 = "armv7athf-neon"
如果armv7athf-neon不在你的可用tune列表中,可执行以下命令查看目标架构支持的ARM 32位tune:
bitbake -e | grep ^AVAILTUNES | tr ' ' '\n' | grep arm
选择输出中适配cortex-a8的32位tune即可。
- 清理旧构建缓存并重新初始化环境:
bitbake -c cleanall mozjpegcjpeg source oe-init-build-env
- 重新执行构建验证修复:
bitbake mozjpegcjpeg
额外说明
你之前执行bitbake -e mozjpegcjpeg | grep ^AVAILTUNES得到的x86 x86-64是**构建系统(x86_64-linux)**的可用tune,而非目标ARM系统的。要查看目标系统的可用tune,直接执行bitbake -e | grep ^AVAILTUNES即可。
内容的提问来源于stack exchange,提问作者Hiệp Nguyễn Văn
相关产品推荐
相关产品推荐

