You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译Cobalt ARM64版本时cpu_features_get.cc出现HWCAP未定义错误

解决Cobalt 22 ARM64编译时HWCAP_SET_FOR_ARMV8未定义的错误

问题背景

编译Cobalt 22版本的ARM64目标(基于WPE BRCM ARM端口),环境为Ubuntu 20.04,使用stbgcc-6.3.18交叉编译器并配置Sysroot,构建src/starboard/shared/linux/cpu_features_get.cc时出现系列HWCAP宏未定义错误,例如:

cpu_features_get.cc:381:12: error: 'HWCAP_SET_FOR_ARMV8' was not declared in this scope

原因分析

  1. 宏定义范围限制:文件中HWCAP_SET_FOR_ARMV8等宏仅在满足SB_IS(32_BIT) || defined(ANDROID)条件时才会被定义,而ARM64 Linux环境下这两个条件均不成立,导致宏未声明。
  2. 代码编译逻辑矛盾:使用这些宏的代码块被包裹在SB_IS(ARCH_ARM) || SB_IS(ARCH_ARM64)条件下,ARM64时该条件为真,代码会被编译,但宏未定义,触发编译错误。
  3. 额外说明:这段调用宏的代码注释明确是针对32位ARM二进制运行在64位ARM64内核的场景,ARM64原生编译时实际不会进入该分支,但编译器仍会检查宏的定义。

解决方案

提供两种可行修改方案,按需选择:

方案1:扩展宏定义的适用范围

修改宏定义的条件,让ARM64环境也能定义所需的HWCAP宏:

  1. 打开src/starboard/shared/linux/cpu_features_get.cc
  2. 找到第53行的条件判断:
    #if SB_IS(32_BIT) || defined(ANDROID)
    
  3. 修改为:
    #if (SB_IS(32_BIT) || defined(ANDROID)) || SB_IS(ARCH_ARM64)
    
  4. 保存文件后重新执行编译流程。

方案2:限制代码分支的触发场景

调整代码逻辑,让ARM64环境下不会编译到依赖未定义宏的分支:

  1. 打开src/starboard/shared/linux/cpu_features_get.cc
  2. 找到ConstructHwcapFromCPUInfo函数中的判断语句:
    if (hwcap_type == AT_HWCAP && architecture_generation >= 8) {
    
  3. 修改为:
    if (hwcap_type == AT_HWCAP && architecture_generation >= 8 && SB_IS(32_BIT)) {
    
  4. 保存文件后重新执行编译流程。

验证

修改完成后,重新运行Cobalt的编译脚本,原有的HWCAP宏未定义错误应该会消失,编译可正常进行。

内容的提问来源于stack exchange,提问作者dscrdia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 20:50:24