有任何方法使HP-UX 11.31(IA64)支持64位time_t

时间:2012-04-27 01:08:20

标签: c long-integer hp-ux time-t itanium

我很惊讶在这个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位?

1 个答案:

答案 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