linux - 构建 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)
在内核构建期间禁用内联时如何摆脱错误?
解决方案
BUILD_BUG_ON()
需要一个常量表达式。有时对内联函数的调用会传递给它。GCC 能够将一些内联函数优化为常量表达式,使其工作。禁用内联将防止这种情况,破坏构建。(在某些情况下,这也是 Clang 的一个问题,它在内联之前进行语义分析。)
您可能必须更改相当多的代码才能构建禁用内联的内核。您引用的页面相当旧;想必这在当时不是问题。
推荐阅读
- angular - 在打字稿中,有没有办法复制数组但不引用原始数组?
- python - 如何使用 python 和 selenium webdriver 从下拉列表中选择值
- python - 在列中按值添加百分比列
- python - django.db.utils.OperationalError; 使用日期查找过滤 QuerySet
- vim - 为什么 netrw 仅在第一次打开资源管理器时以小的垂直拆分打开文件?
- azure-log-analytics - 为表中的每一行添加一个虚拟行
- c++ - 如果函数包含静态变量,为什么编译器不执行内联?
- python - 使用来自多个字典的 for 循环填充列
- llvm - LLVM IR 全局变量和函数声明是否必须使用 `external` 和 `extern_weak` 链接类型?
- c - For 循环没有迭代正确的次数