根据本综述,为了编译符合旧代码的Y2038,我们只需要向gcc
添加预处理宏__USE_TIME_BITS64
,但这似乎不适用于Debian 12 (书虫)的ARMv7板:
#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <unistd.h>
int main(void)
{
struct stat sb;
printf("sizeof time_t: %zu\n", sizeof(time_t));
printf("sizeof stat timestamp: %zu\n", sizeof(sb.st_atime));
return 0;
}
time_t仍然是4个字节:
root@debian:~# gcc -D__USE_TIME_BITS64 time.c -o time
root@debian:~# ./time
sizeof time_t: 4
sizeof stat timestamp: 4
root@debian:~#
glibc是2.33,我做错什么了?
发布于 2022-03-24 08:49:01
根据这个职位 (它现在有点老了,其中一些部分可能不再相关):
..。定义
_TIME_BITS=64
将导致所有时间函数默认使用64位时间。_TIME_BITS=64
选项是通过透明地将标准函数和类型映射到其内部64位变量来实现的。Glibc还将设置__USE_TIME_BITS64
,用户代码可以对其进行测试,以确定64位变体是否可用。
这大概包括制作time_t
64位。
因此,如果您的glibc版本完全支持这一点,那么看起来您设置的宏是错误的。你想:
-D_TIME_BITS=64
https://stackoverflow.com/questions/71599103
复制相似问题