此错误通常出现在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进行编译(未测试)