【发布时间】:2020-07-27 03:01:39
【问题描述】:
我采用 Linux 内核版本 4.9.30,添加了一个新目录 /fsac,其文件包含来自其他目录 (/include/fsac) 的头文件,这几乎是我所做的全部更改。尝试编译时,我在 /kernel/sched/core.c 中遇到很多错误,如下所示:
kernel/sched/core.c:2326:20: error: invalid storage class for function ‘set_schedstats’
kernel/sched/core.c:2342:19: error: invalid storage class for function ‘setup_schedstats’
(...)
在线搜索我看到建议是简单地从函数中删除“静态”。这样做有效地避免了这些错误,但相反,我开始从 objtool 收到很多警告,例如对于删除了静态的每个函数的“帧指针状态不匹配”。
我发现这些警告可以通过更改配置文件CONFIG_STACK_VALIDATION=n 来避免。这可行,但即使没有警告,编译也会失败(错误 2)。
因此,我想知道:
1 - 从被冒犯的函数中删除“静态”是正确的解决方案吗?
2 - 如果是这样,我该如何处理 objtool 警告?这些警告是否会单独构成编译错误,还是一定有其他原因?
3 - 你认为我应该降级 GCC 吗?
这是项目的源代码:https://github.com/Zildj1an/FSAC_Kernel 这是没有删除静态的编译日志:https://github.com/Zildj1an/FSAC_Kernel/blob/master/build_err
我很乐意提供您可能需要的任何其他信息。
干杯。
【问题讨论】:
-
最好你也在这里添加编译警告。
-
static函数是仅对同一文件中的其他函数可见的函数。所以,如果你在原始文件之外使用那些static函数(我猜你可能在你的代码中使用它们)那么你会得到这些错误。 -
@campescassiano 完成!我没有使用 core.c 中的函数
-
你能在不修改的情况下编译内核吗?
标签: c linux makefile compilation kernel