在Android 12手机中执行的程序中的以下代码:
struct timeval tv;
int ret = gettimeofday(&tv, NULL);
if (ret < 0)
printf("gettimeofday failed with %s\n", strerror(errno));
printf("%lu.%ld\n", tv.tv_sec, tv.tv_usec);
退货
gettimeofday failed with Value too large for defined data type
1078605538.1
此外,seconds和useconds始终是常量,即使在循环中调用也是如此。
一定是出了什么问题,因为根据手册页,gettimeofday()
不应该返回errno 75。
空间输出:
read(3, " \0\0\0\1\0\0\0\273\0\0\0\230\1\0\0\1\0\0\0\20\0\254\0\254\0\223\261zG\377F"..., 65536) = 199
clock_gettime(CLOCK_REALTIME, {tv_sec=3416400658881740019, tv_nsec=4632575514938983213}) = 0
dup(2) = 4
fcntl64(4, F_GETFL) = 0x20002 (flags O_RDWR|O_LARGEFILE)
statx(4, "", AT_STATX_SYNC_AS_STAT|AT_NO_AUTOMOUNT|AT_EMPTY_PATH, STATX_BASIC_STATS, {stx_mask=STATX_BASIC_STATS, stx_attributes=0, stx_mode=S_IFCHR|0600, stx_size=0, ...}) = 0
write(4, "gettimeofday: Value too large fo"..., 52gettimeofday: Value too large for defined data type
) = 52
close(4)
[ and same repeats, we are in a loop ]
2条答案
按热度按时间xlpyo6sf1#
原来这是一个Android相关的问题,在从使用arm-linux-gnueabi-gcc交叉编译切换到使用ndk-build之后,这个问题得到了解决。
不完全确定根本原因,但Makefile中的某些东西关闭了。
8ljdwjyq2#
我认为这是最近Android内核的一个倒退。注意这只影响运行在64位内核上的32位ARM代码。可能你的NDK目标是AArch64。