Value too large for defined date type

Linux系统 0 732 张长瑞 收藏

此错误通常出现在 32 位二进制可执行程序的执行结果

此问题在 BD 后通常会有以下几种解释

1、挂载 mount 问题

2、 FILE_OFFSET_BITS 编译参数问题

3、存储问题

通常来讲,32 位二进制可执行文件出现这个错误都是 inode 问题。

所谓 inode 就是文件索引,包含文件大小,权限,时间戳等信息。 通常 32 位的二进制可执行程序在自身或者调用其他文件前需要先进行 inode 信息查询。

32 位应用程序使用的 inode32 最多能表达数字是 4294967295 ,也就是 10 位数

而当你使用 stat 命令来查看文件详情时,如果出现 inode 值大于这个数。那么恭喜你,你的存储太大了。。

解决方法有一下几种

1、修改挂载(几乎可以忽略,除非是外部初始为空的 NFS 共享)

mount |grep -E /home
/dev/mapper/centos-home on /home type xfs (rw,relatime,seclabel,attr2,inode64,noquota)

可以看到挂载的为 inode64 的方式,可以修改为 32 位的方式。但是似乎这种本地的磁盘无法修改,毕竟里面有文件,系统也要读取的。

2、重新编译或修改源代码

添加参数

#define _FILE_OFFSET_BITS 64

可以将这行定义在 /usr/include/feature.h 中

或者

将程序的 32 位寻址参数修改为 64 位,例如 stat 修改为 stat64

3、更换编辑器

据说 gcc4.4.5 以上修复了这个问题,可以尝试使用新版本的 gcc 进行编译(未测试)


相关推荐:

网友留言:

您需要 登录账户 后才能发表评论

我要评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。
验证码