MAP_ANON 和 MAP_ANONYMOUS 都未在 C 中为 sys/mmap 声明

bom*_*bax 3 c unix memory

这是我的mman.h文件,包括/usr/include/sys/

http://pastebin.com/FZpHwKMC

mmap()似乎以某种方式定义了(并且可以与标志 0 和读/写保护一起使用),但不是MAP_ANON MAP_ANONYMOUS如下所示:

#include <sys/mman.h>

int a = MAP_ANON; /* compile error */
int b = MAP_ANONYMOUS; /* also compile error */
Run Code Online (Sandbox Code Playgroud)

我不知所措。我正在使用这个 makefile 进行编译:

http://pastebin.com/R1V2edmf

编辑:原来MAP_ANONYMOUS宏定义在/usr/include/bits/mman.h只有__USE_MISC定义...

任何帮助都会很棒!

Cmd*_*ozy 5

如果您使用 GCC,发生这种情况的一个常见原因是您没有使用 GNU C 标准。尝试编译,例如,-std=gnu11,看看是否能解决问题。

可以在此处找到有关 GCC 语言标准的更多信息。

GCC 还提供了一个非常详尽的列表,列出了它们在此处提供的扩展。

此外,作为旁注,最好使用MAP_ANONYMOUS代替MAP_ANON,因为后者已被弃用(根据man mmap)。

  • 是的,就是这个。ANON 选项在 gnu 编译器套件之外不可移植,因此您必须至少具有 -std=gnu89 。有趣的是,在我的 AIX 和 HPUX 机器上,这些选项默认存在于 IBM 和 HP 编译器中...... (2认同)