编译平板版Android Oreo时遇SOONG_CLANG_CONFIG_arm_TARGET_TRIPLE只读变量错误求助
解决 "cannot assign to readonly variable: SOONG_CLANG_CONFIG_arm_TARGET_TRIPLE" 构建错误
我之前编译LineageOS的时候也碰到过这个一模一样的错误,给你梳理几个最可能的成因和对应的解决办法:
1. 自定义配置文件里手动赋值了只读变量
SOONG_CLANG_CONFIG_arm_TARGET_TRIPLE是Soong构建系统自动生成的只读变量,用来指定ARM架构的编译目标三元组,根本不需要咱们手动设置。你得检查下这些地方:
- 设备专属的mk文件(比如
device/qcom/YT3850M/YT3850M.mk) BoardConfig.mk- 相关vendor目录下的配置文件
如果找到直接写SOONG_CLANG_CONFIG_arm_TARGET_TRIPLE := xxx的语句,直接删掉或者注释掉就行。
2. 旧构建缓存残留导致冲突
有时候之前编译的缓存文件会残留错误的变量定义,清理一下就能解决:
# 重点清理Soong缓存 rm -rf out/soong # 可选:清理全部编译产物 make clean # 重新初始化构建环境 source build/envsetup.sh lunch lineage_YT3850M-userdebug # 重新编译 m
3. 设备架构配置错误
检查BoardConfig.mk里的架构相关配置是否正确,ARM设备的典型配置应该是这样的(根据你的设备CPU调整TARGET_CPU_VARIANT):
TARGET_ARCH := arm TARGET_ARCH_VARIANT := armv7-a-neon TARGET_CPU_VARIANT := cortex-a9
错误的架构设置可能让Soong生成变量时出问题,进而触发赋值冲突。
4. 工具链或Soong配置被篡改
如果你手动替换过Clang工具链,或者修改过Soong的全局配置,建议重置回官方默认状态:
repo sync -c -j$(nproc)
同步完成后重新初始化环境再编译试试。
快速排查小技巧
用grep命令精准定位哪个文件在给这个变量赋值:
grep -r "SOONG_CLANG_CONFIG_arm_TARGET_TRIPLE" device/qcom/YT3850M/ vendor/qcom/
内容的提问来源于stack exchange,提问作者Frostillus Sandcastle
相关产品推荐
相关产品推荐

