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

编译Android内核遇报错:unrecognized option '-EL'等问题求助

编译OnePlus SM8250 Android 11内核的错误与解决方法

错误1:/usr/bin/as: unrecognized option '-EL'

问题原因

系统自带的/usr/bin/as被错误调用,而非指定的llvm-as。根源是PATH和LD_LIBRARY_PATH路径拼接错误(缺少分隔符冒号),导致工具链优先级低于系统工具,同时存在无效变量干扰编译流程。

解决步骤

  1. 修复路径拼接:工具链路径后必须加冒号再拼接原有路径,确保自定义工具链被优先调用
  2. 移除无效的CROSS_COMPILER变量(内核Makefile不识别该变量,会干扰编译逻辑)
  3. 为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触发未使用函数警告。

解决步骤

有两种可选方案:

  1. 添加编译选项禁用警告:在make参数中新增CFLAGS_KERNEL+=-Wno-unused-function
  2. 修改函数定义,添加__attribute__((unused))修饰标记:
    static void __attribute__((unused)) dump_workqueue(void) {}
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:25:14