【发布时间】:2021-07-09 06:46:41
【问题描述】:
我正在尝试使用来自 Android NDK r16b 的工具链为 Android 编译我自己的自定义内核。我在here 获得内核源代码。我从未修改过内核的源代码(特别是那部分)。这就是我在编译时遇到的问题。
/root/custom-kernel/kernel/Xiaomi_Kernel_OpenSource-cactus-o-oss/drivers/misc/mediatek/base/power/mcdi/mcdi_v1/mtk_mcdi_profile.c: In function 'mcdi_profile_read':
/root/custom-kernel/kernel/Xiaomi_Kernel_OpenSource-cactus-o-oss/drivers/misc/mediatek/base/power/mcdi/mcdi_v1/mtk_mcdi_profile.c:239:2: error: missing braces around initializer [-Werror=missing-braces]
} cnt[2] = {0};
^
/root/custom-kernel/kernel/Xiaomi_Kernel_OpenSource-cactus-o-oss/drivers/misc/mediatek/base/power/mcdi/mcdi_v1/mtk_mcdi_profile.c:239:2: error: (near initialization for 'cnt[0].sec') [-Werror=missing-braces]
cc1: all warnings being treated as errors
This 是产生错误的代码部分。 如果您想查看完整的内核编译日志,可以在here 中查看。 这是我编译内核的步骤:
export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=/root/custom-kernel/kernel/toolchain/bin/arm-linux-androideabi-
cd /root/custom-kernel/kernel/Xiaomi_Kernel_OpenSource-cactus-o-oss
make clean
make mrproper
mkdir ../out
make O=../out cereus_defconfig
cd ../out
make
我已经尝试了here 的解决方案,但仍然无法解决。 任何答案/帮助表示赞赏!
【问题讨论】:
-
您是否编写或修改了编译器抱怨的代码?请显示更多上下文,以便我们可以看到的不仅仅是编译器报告的单个上下文之外的行。
-
您至少需要指定编译器名称、版本、平台以及源的版本和编译时间参数。我认为当数组元素本身是某些结构或其他复合数据类型时,您看到的错误与零初始化数组元素 (
{0}) 有关。您可以尝试使用--std=c11编译器选项或使用gnu扩展。或者,您可以尝试将代码修改为{{0}}(注意额外的大括号) -
@Fractal 我已经尝试过了,不幸的是它不能解决问题。
-
好吧,用 plain
0初始化一个 structure 类型看起来不正确:github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/cactus-o-oss/…。 (0周围的现有大括号被数组初始化所消耗。)。初始化器{{{0}}}应该有帮助:第一对花括号用于未命名结构的数组,第二对花括号用于该结构的字段,第三对花括号用于初始化sec数组的元素。跨度>