我发现我的 Ubuntu 16.04.3 LTS 机器上的 /usr/include/linux/version.h 中定义的 LINUX_VERSION_CODE 是(相当于)4.4.90,而预期是 4.10.0。
bash% lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.3 LTS
Release: 16.04
Codename: xenial
bash% bash% uname -r
4.10.0-28-generic
bash% cat /usr/include/linux/version.h
#define LINUX_VERSION_CODE 263258
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
bash% perl
my $version=263258;
my $a=($version >> 16) & 0xff;
my $b=($version >> 8) & 0xff;
my $c=$version & 0xff;
print "$version -> $a.$b.$c\n";
263258 -> 4.4.90
因此,如下的预处理器宏不起作用。
#include <linux/version.h>
#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0).
// do something
#endif
这是否意味着我的安装存在问题?或者我们建议不要在 Ubuntu 上使用 LINUX_VERSION_CODE?
答案1
看起来您安装的版本特定内核头文件可能与您正在运行的内核不匹配。以前有一个元包,无论如何都会保留当前安装的元包。