【问题标题】:Android Kernel Compilation - error: missing braces around initializer [-Werror=missing-braces]Android 内核编译 - 错误:初始化器周围缺少大括号 [-Werror=missing-braces]
【发布时间】: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 的解决方案,但仍然无法解决。 任何答案/帮助表示赞赏!

【问题讨论】:

  • 您是否编写或修改了编译器抱怨的代码?请显示更多上下文,以便我们可以看到的不仅仅是编译器报告的单个上下文之外的行。
  • 请花一些时间刷新the help pages,尤其是"What topics can I ask about here?""What types of questions should I avoid asking?"。还可以通过tour 阅读How to Ask 好问题和this question checklist。最后不要忘记如何创建minimal reproducible example
  • 您至少需要指定编译器名称、版本、平台以及源的版本和编译时间参数。我认为当数组元素本身是某些结构或其他复合数据类型时,您看到的错误与零初始化数组元素 ({0}) 有关。您可以尝试使用--std=c11 编译器选项或使用gnu 扩展。或者,您可以尝试将代码修改为{{0}}(注意额外的大括号)
  • @Fractal 我已经尝试过了,不幸的是它不能解决问题。
  • 好吧,用 plain 0 初始化一个 structure 类型看起来不正确:github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/cactus-o-oss/…。 (0 周围的现有大括号被数组初始化所消耗。)。初始化器{{{0}}} 应该有帮助:第一对花括号用于未命名结构的数组,第二对花括号用于该结构的字段,第三对花括号用于初始化sec 数组的元素。跨度>

标签: c kernel


【解决方案1】:

我解决了用{{{0}}} 替换{0} 的问题,正如@Tsyvarev 在评论中所说的

好吧,用普通的 0 初始化结构类型看起来不正确:github.com/MiCode/Xiaomi_Kernel_OpenSource/blob/cactus-o-oss/...。 (数组初始化消耗了 0 附近的现有大括号。)。初始化程序 {{{0}}} 应该有所帮助:第一对大括号用于未命名结构的数组,第二对大括号用于该结构的字段,第三对大括号用于初始化 sec 数组的元素。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-15
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多