这是我的 mman.h
文件,包含在 /usr/include/sys/
中:
不知何故 mmap()
似乎被定义了(并且可以与标志 0 和读/写保护一起使用),但不是 MAP_ANON
或 MAP_ANONYMOUS
如下所示:
#include <sys/mman.h>
int a = MAP_ANON; /* compile error */
int b = MAP_ANONYMOUS; /* also compile error */
我不知道哪里出了问题。我正在使用这个 makefile 进行编译:
编辑:事实证明 MAP_ANONYMOUS
宏是在 /usr/include/bits/mman.h
中定义的,但仅如果__USE_MISC
定义...
任何帮助都会很棒!
最佳答案
如果您使用的是 GCC,发生这种情况的一个常见原因是您没有使用 GNU C 标准。尝试使用例如 -std=gnu11
进行编译,看看是否能解决问题。
可以找到有关 GCC 语言标准的更多信息 here .
GCC 还提供了一个非常详尽的列表,详细列出了它们提供的扩展 here .
此外,作为旁注,最好使用 MAP_ANONYMOUS
而不是 MAP_ANON
,因为后者已被弃用(根据 man mmap
).
关于c - MAP_ANON 和 MAP_ANONYMOUS 都未在 C 中为 sys/mmap 声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23817309/