我正在尝试将我的 32 位 ARM 架构移植到 64 位时间值。
从Linux Kernel 中的 64 位 time_t读取答案,它告诉我以下信息:
所有用户空间都必须使用 64 位 time_t 进行编译,即将到来的 musl-1.2 和 glibc-2.32 版本以及已安装的 linux-5.6 或更高版本的内核头文件都将支持它。
我正在使用自定义 Linux 内核版本 5.10.10 并使用 glibc 版本 2.32 使用 crosstool-ng 构建我自己的 gcc 工具链。
为了测试时间大小,我写了一个简单的打印:
printf("Timesize = %d\n", __TIMESIZE);
printf("sizeof time_t = %d\n", sizeof(tv.tv_sec));
这给了我输出:
时间大小 = 32
time_t 的大小 = 4
按照glibc-2.32中的defines和typedefs,可以看到相关类型定义如下:
#define __TIMESIZE __WORDSIZE
#define __TIME_T_TYPE __SLONGWORD_TYPE
#define __SLONGWORD_TYPE long int
但是对于我的架构来说__WORDSIZE
,__SLONGWORD_TYPE
它们的大小都是 32 位的。
是否可以time_t
在我的 32 位架构目标上定义为 64 位?