我试着在我的c代码中使用mman.h
中的函数。代码用g++/clang++编译很好,但是当使用gcc/clang时,它说memfd_create
没有被声明,但是代码仍然运行良好。
我试着用godbolt在线编译,结果和本地编译一样,所以我怀疑是我的设置有问题。有人知道为什么会这样吗?我用的是gcc 11.3和clang 14。
# include <stdint.h>
# include <stdio.h>
# define _GNU_SOURCE
# include <sys/mman.h>
int main()
{
int32_t fd = memfd_create("", 0);
if (fd == -1)
{
printf("Error creating fd\n");
return -1;
}
return 0;
}
编译警告:
main.c:9:15: warning: implicit declaration of function 'memfd_create' is invalid in C99 [-Wimplicit-function-declaration]
int32_t fd = memfd_create("", 0);
1条答案
按热度按时间nqwrtyyt1#
_GNU_SOURCE
必须在任何#include
之前。请参阅man feature_test_macros
。