我使用的是 CentOS 7,内核版本为 3.10.0-1160.15.2.el7.x86_64。
当我尝试使用
MAP_HUGE_1GB
和 MAP_HUGE_2MB
标志时,g++-9.3.1 抱怨:
error: ‘MAP_HUGE_1GB’ was not declared in this scope; did you mean ‘MAP_HUGETLB’?
然后,我发现了这个post,答案建议我需要“
#define _GNU_SOURCE
在#include <sys/mman.h>
之前,因为这是一个非标准标志”。
但是,定义
_GNU_SOURCE
会导致 warning: "_GNU_SOURCE" redefined
但 g++ 仍然抱怨这两个标志没有声明。
然后,我发现了这个post,它建议使用定义为
_GNU_SOURCE
的libstdc++
。
现在,我很困惑如何使用
MAP_HUGE_1GB
和 MAP_HUGE_2MB
标志。
谢谢!
Glibc 直到版本 2.40 才在其任何头文件中定义
MAP_HUGE_1GB
或 MAP_HUGE_2MB
(具体来说,提交 176671f60429(“linux:添加 Hugetlb 页面大小编码的定义”)),而 CentOS 7 仅具有版本glibc 2.17。由于 CentOS 7 无论如何都已停产,因此您最好的选择是升级到具有足够新版本的 glibc 的较新发行版。如果做不到这一点,如果您安装了 kernel-headers
软件包,则可以通过执行 #include <linux/mman.h>
来获取这些常量。