gpt4 book ai didi

c - 错误: implicit declaration of function 'rdtscl' [-Werror=implicit-function-declaration] (but no error when running on older kernel version)

转载 作者:行者123 更新时间:2023-11-30 21:05:04 32 4
gpt4 key购买 nike

我对这一切都很陌生,正在尝试在内核版本为 3.10.0-957.el7.x86_64 的虚拟机上编译程序。但我收到此错误:

/home/../../../isr_demux.c: In function 'demux0_isr':
/home/../../../ isr_demux.c: 782:3: error: implicit declaration of function 'rdtscl' [-Werror=implicit-function-declaration]`

我打开 isr_demux.c 并看到它所说的导致错误的代码片段是这样的: enter image description here

倒数第三行是第 782 行。有趣的是,同一个文件在具有旧内核版本 3.10.0-327.el7.x86_64 的虚拟机上编译得很好。

我在网上搜索了很多,但确实被困住了。我看到了另一篇文章并检查了我的头文件,其中包括 linux/proc_fs.h 以及许多其他文件。有人说我可能缺少函数原型(prototype)或定义,但添加原型(prototype)并不能解决此问题,并且定义函数会导致重新定义错误。

关于我是否仍然在某个地方缺少头文件有什么想法吗?或者,如果问题出在较新的内核本身,我可能需要找到某种补丁?谢谢!

最佳答案

网站 elixir.bootlin.com 对于这些事情非常有用。以下链接是在整个内核源代码树中搜索版本 3.10.108 的符号 rdtscl。

https://elixir.bootlin.com/linux/v3.10.108/ident/rdtscl

rdtscl 仅定义为宏,因此看起来宏未定义,而您收到有关 rdtscl 隐式声明的错误。

rdtscl被定义为宏的两个地方是: https://elixir.bootlin.com/linux/v3.10.108/source/arch/x86/include/asm/msr.h#L182 https://elixir.bootlin.com/linux/v3.10.108/source/arch/x86/include/asm/paravirt.h#L182

因此,如果您正在为 x86 构建,解决方法是包含正确的头文件(定义这些宏的头文件位于 arch/x86 中),或者用其他内容替换对 rdtscl 的调用。

关于c - 错误: implicit declaration of function 'rdtscl' [-Werror=implicit-function-declaration] (but no error when running on older kernel version),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56812952/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com