缺少 MAP_HUGE_1GB 和 MAP_HUGE_2MB?

问题描述 投票:0回答:1

我使用的是 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
标志。

谢谢!

c++ g++ centos7 mmap huge-pages
1个回答
3
投票

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>
来获取这些常量。

© www.soinside.com 2019 - 2024. All rights reserved.