编译Android内核遇报错:unrecognized option '-EL'等问题求助
编译OnePlus SM8250 Android 11内核的错误与解决方法
错误1:/usr/bin/as: unrecognized option '-EL'
问题原因
系统自带的/usr/bin/as被错误调用,而非指定的llvm-as。根源是PATH和LD_LIBRARY_PATH路径拼接错误(缺少分隔符冒号),导致工具链优先级低于系统工具,同时存在无效变量干扰编译流程。
解决步骤
- 修复路径拼接:工具链路径后必须加冒号再拼接原有路径,确保自定义工具链被优先调用
- 移除无效的
CROSS_COMPILER变量(内核Makefile不识别该变量,会干扰编译逻辑) - 为clang明确指定目标架构,避免汇编器调用异常
修改后的build.sh关键片段:
# 修复路径分隔符问题 PATH="${HOME}/heh/Desktop/clang/bin:${HOME}/heh/Desktop/toolchains/bin:${PATH}" \ LD_LIBRARY_PATH="${HOME}/heh/Desktop/clang/lib:${HOME}/heh/Desktop/toolchains/lib:${PATH}" \ make O=out \ ARCH=arm64 \ SUBARCH=arm64 \ CROSS_COMPILE=aarch64-linux-android- \ CLANG_TRIPLE=aarch64-linux-gnu- \ RANLIB=/home/heh/Desktop/clang/bin/llvm-ranlib \ CC='/home/heh/Desktop/clang/bin/clang -fintegrated-as --target=aarch64-linux-gnu' \ AR=/home/heh/Desktop/clang/bin/llvm-ar \ AS=/home/heh/Desktop/clang/bin/llvm-as \ NM=/home/heh/Desktop/clang/bin/llvm-nm \ OBJCOPY=/home/heh/Desktop/clang/bin/llvm-objcopy \ OBJDUMP=/home/heh/Desktop/clang/bin/llvm-objdump \ READELF=/home/heh/Desktop/clang/bin/llvm-readelf \ OBJSIZE=/home/heh/Desktop/clang/bin/llvm-size \ STRIP=/home/heh/Desktop/clang/bin/llvm-strip \ -j4
警告2:field 'cgrp' with variable sized type...
问题原因
内核代码使用了GNU扩展语法(变长结构体字段未放在结构体末尾),clang默认会触发该语法警告。
解决步骤
在make命令中添加编译选项禁用该警告:
# 在make参数中新增以下内容 CFLAGS_KERNEL+=-Wno-gnu-variable-sized-type-not-at-end
也可以直接在内核defconfig中设置CONFIG_WERROR=n,避免警告被强制转为错误中断编译。
警告3:unused function 'dump_workqueue'
问题原因
静态函数dump_workqueue未被任何代码调用,clang触发未使用函数警告。
解决步骤
有两种可选方案:
- 添加编译选项禁用警告:在make参数中新增
CFLAGS_KERNEL+=-Wno-unused-function - 修改函数定义,添加
__attribute__((unused))修饰标记:static void __attribute__((unused)) dump_workqueue(void) {}
内容的提问来源于stack exchange,提问作者JohnTit
相关产品推荐
相关产品推荐

