ARM平台构建Qt 6.2.9 WebEngine子模块报错求助
xpaclri指令错误 问题重现
构建Qt 6.2.9时触发如下编译错误:
{standard input}:2829: Error: selected processor does not support `xpaclri'
[325/15536] ACTION //components/resources:about_credits(qt-everywhere-src-6.2.9/build2/qtwebengine/src/core/target_toolchain:target)
ninja: build stopped: subcommand failed.
环境信息:
- gcc: 10.3.0
- OS: RHEL8.10
- 架构: aarch64
- 内核版本: 4.18.0-553.16.1.el8_10
- 处理器: Neoverse-N1
已尝试设置环境变量但无效:
export CFLAGS="-march=armv8.2-a -mbranch-protection=none" export CXXFLAGS="-march=armv8.2-a -mbranch-protection=none"
跳过qtwebengine(-skip qtwebengine)时构建正常。
问题原因
xpaclri是ARMv8.3-A架构引入的指令,而Neoverse-N1仅支持ARMv8.2-A,因此编译器生成该指令会触发错误。问题根源在于QtWebEngine的构建系统(基于Chromium的GN工具)未正确继承全局CFLAGS/CXXFLAGS,而是硬编码了更高版本的ARM架构参数。
修复方法
方法1:通过configure传递GN参数
在Qt的configure命令中添加-webengine-args参数,强制指定ARM架构版本:
./configure \ # 保留你原有的其他configure参数 \ -webengine-args="target_cpu=\"arm64\" arm_arch=\"armv8.2-a\" arm_branch_protection=\"none\""
或者在configure前设置GN_ARGS环境变量:
export GN_ARGS="target_cpu=\"arm64\" arm_arch=\"armv8.2-a\" arm_branch_protection=\"none\""
之后重新执行configure和ninja构建。
方法2:修改QtWebEngine的GN配置文件
如果方法1无效,手动修改QtWebEngine的GN配置:
- 进入QtWebEngine源码目录:
qt-everywhere-src-6.2.9/qtwebengine/src/core - 找到工具链配置文件(如
toolchain/BUILD.gn或build/config/arm.gni) - 找到设置
arm_arch的位置,将其值从armv8.3-a或更高改为armv8.2-a - 确保
arm_branch_protection被设置为none
方法3:验证编译参数传递
运行configure时添加-v参数,查看QtWebEngine相关编译命令是否包含-march=armv8.2-a -mbranch-protection=none,确认参数是否被正确传递。
内容的提问来源于stack exchange,提问作者niraj pandey

