gpt4 book ai didi

基于 Linux 内核头文件中功能的条件编译

转载 作者:可可西里 更新时间:2023-11-01 11:51:18 25 4
gpt4 key购买 nike

考虑我正在使用导出到用户空间的 Linux header 中的某些功能的情况,例如 perf_event_open 来自 <linux/perf_event.h> .

此 API 提供的功能随着时间的推移而发生变化,因为成员已添加到 perf_event_attr ,例如 perf_event_attr.cap_user_time .

如果这些新功能在本地可用,我如何编写源代码来编译和使用这些新功能,但如果它们在本地不可用且不使用它们,我该如何优雅地回退?

特别是,我如何在预处理器中检测这些东西是否可用?

我用过这个perf_event_attr作为一个例子,但我的问题是一个一般性问题,因为结构成员、新结构、定义和函数一直在添加。

请注意,这里我只考虑进程在它将运行的同一系统上编译的情况:如果你想在一台主机上编译并在另一台主机上运行,​​你需要一组不同的技巧。

最佳答案

使用/usr/include/linux/version.h中的宏:

#include <linux/version.h>

int main() {
#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,16)
// ^^^^^^ change for the proper version when `perf_event_attr.cap_user_time` was introduced
// use old interface
#else
// use new interface
// use perf_event_attr.cap_user_time
#endif
}

关于基于 Linux 内核头文件中功能的条件编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56485820/

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