You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

已定义_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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 21:35:57