我很惊讶在这个HP-UX 11.31(IA64)中学习long类型和time_t是4字节大小。我可以问为什么?
我的环境:
$ uname -a
HP-UX bdev1 B.11.31 U ia64 0999202893 unlimited-user license
$ cat /usr/include/sys/_time_t.h
......
# ifndef _TIME_T
# define _TIME_T
# ifdef _KERNEL
typedef int32_t time_t;
# else /* !_KERNEL */
_NAMESPACE_STD_START
typedef long time_t;
_NAMESPACE_STD_END
# endif /* !_KERNEL */
# endif /* _TIME_T */
我的代码:
$ cat sizeof.cpp
#include <iostream>
#include <ctime>
#define PRINT_SIZE(a) \
std::cout << #a << ": " << sizeof(a) << std::endl
int main(void)
{
PRINT_SIZE(long);
PRINT_SIZE(time_t);
return 0;
}
$ aCC sizeof.cpp
$ ./a.out
long: 4
time_t: 4
任何人都可以帮我找到一种方法让aCC将time_t改为64位?
答案 0 :(得分:3)
我有一种预感,无论出于何种原因,g ++决定在HP-UX系统上输出32位代码。您可以使用-mlp64
flag更改构建环境,如下所示:
$ g++ -Wall -mlp64 sizeof.cpp
如果您正在使用aCC, you use +DD64
:
$ aCC +DD64 sizeof.cpp
HP-UX 11i v2的对象格式为ELF,因此您可以使用+ DD64选项生成LP64代码。 (source)