使用Clang 19编译Android内核时遇aapcs ABI不支持double类型错误
解决Clang 19编译Android内核时的浮点ABI错误
你遇到的错误源于Clang 19对ABI检查的严格性:宏F中传入了1.5、7.5这类浮点数,宏展开后计算2*(h)-1会触发浮点运算,但ARM的aapcs ABI在内核编译场景下不支持这类浮点表达式。不需要降级Clang,试试以下解决办法:
办法1:替换浮点数为整数表达式
把宏调用里的浮点数改成等价的整数除法,保证计算结果一致且无浮点操作:
- 将
1.5替换为3/2 - 将
7.5替换为15/2
修改后对应代码行示例:
F(266666667, P_CAM_CC_PLL0_OUT_ODD, 3/2, 0, 0), F(320000000, P_CAM_CC_PLL2_OUT_MAIN, 3/2, 0, 0), F(80000000, P_CAM_CC_PLL0_OUT_EVEN, 15/2, 0, 0),
办法2:修改宏定义强制类型转换
如果不想逐个修改宏调用,可以直接调整F宏的定义,将浮点运算结果强制转为整数:
#define F(f, s, h, m, n) { (f), (s), ((int)(2 * (h) - 1)), (m), (n) }
不过更推荐办法1,因为内核时钟配置参数本就应该是整数语义,用浮点数属于不规范写法。
办法3:应用Clang 19适配补丁
查看对应LineageOS内核仓库是否有针对Clang 19的兼容性修复补丁,或在社区寻找相关提交,直接应用补丁即可批量解决这类问题。
内容的提问来源于stack exchange,提问作者Marcos
相关产品推荐
相关产品推荐

