已定义_GNU_SOURCE仍遇FALLOC_FL_KEEP_SIZE未声明编译错误求助
解决FALLOC_FL_KEEP_SIZE未声明的编译错误
问题背景
代码中已在包含<fcntl.h>前定义_GNU_SOURCE,但编译时仍报错error: 'FALLOC_FL_KEEP_SIZE' undeclared (first use in this function)。通过grep确认该宏定义在/usr/include/linux/falloc.h中。
解决方法
方法1:直接包含<linux/falloc.h>
修改代码,在现有头文件后添加对<linux/falloc.h>的引用,这是最直接的解决方案:
#include <stdio.h> #define _GNU_SOURCE /* For Linux's fallocate(). */ #define HAVE_FALLOCATE 1 #include <fcntl.h> #include <linux/falloc.h> // 新增该行以引入目标宏定义 int main(void) { printf("%d\n", FALLOC_FL_KEEP_SIZE); }
方法2:确认<fcntl.h>的自动包含条件(可选)
部分环境中,<fcntl.h>会在定义_GNU_SOURCE且满足内核版本要求时自动包含<linux/falloc.h>,但你的环境可能未触发该逻辑。可以检查系统<fcntl.h>的源码,查看是否需要额外定义其他宏(如__USE_GNU),但这种方式不如直接包含头文件可靠。
不推荐:手动定义宏
虽然可以直接在代码中手动定义#define FALLOC_FL_KEEP_SIZE 0x01,但该值可能随内核版本变化,因此不建议采用这种硬编码方式。
内容的提问来源于stack exchange,提问作者Madagascar
相关产品推荐
相关产品推荐

