首页 > 解决方案 > 构建 Linux Kernel 4.18 时出现编译时错误

问题描述

我试图在编译 Linux 内核 4.18 时禁用内联。

为此,我根据以下内容更新了 Makefile:https ://elinux.org/Kernel_dynamic_memory_analysis#Obtaining_accurate_call_sites_.28or_The_painstaking_task_of_wrestling_against_gcc.29

但是在编译时出现以下错误:

错误:调用带有属性错误声明的“__compiletime_assert_1094”:BUILD_BUG_ON 失败:p4d_large(*p4d)

在内核构建期间禁用内联时如何摆脱错误?

标签: linuxgcccompiler-errorslinux-kernel

解决方案


BUILD_BUG_ON()需要一个常量表达式。有时对内联函数的调用会传递给它。GCC 能够将一些内联函数优化为常量表达式,使其工作。禁用内联将防止这种情况,破坏构建。(在某些情况下,这也是 Clang 的一个问题,它在内联之前进行语义分析。)

您可能必须更改相当多的代码才能构建禁用内联的内核。您引用的页面相当旧;想必这在当时不是问题。


推荐阅读