【问题标题】:Have any method make HP-UX 11.31(IA64) support 64-bit time_t有什么方法可以让 HP-UX 11.31(IA64) 支持 64-bit time_t
【发布时间】:2012-05-07 18:43:27
【问题描述】:

得知在这个 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 位的方法吗?

【问题讨论】:

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


    【解决方案1】:

    我有一种预感,无论出于何种原因,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)

    【讨论】:

    • 很抱歉忘记指出我在工作中使用 aCC。所以问题是如何使用aCC来解决它。我重新编辑了我的问题。
    • 是的,我也找到了这个 arg。但是为什么程序在时间到了 2040 年的时候就停止了。我建议是 time_t 限制,但现在证明不是。
    猜你喜欢
    • 1970-01-01
    • 2012-12-07
    • 2017-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-09
    • 1970-01-01
    相关资源
    最近更新 更多