2

この 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

time_t を aCC で 64 ビットにする方法を見つけるのを手伝ってくれる人はいますか?

4

1 に答える 1

3

なんらかの理由で、g++ が HP-UX システムで 32 ビット コードを出力することを決定したという予感があります。次のように、-mlp64フラグを使用してビルド環境を変更できます。

$ g++ -Wall -mlp64 sizeof.cpp

aCC を使用+DD64している場合は、次を使用します。

$ aCC +DD64 sizeof.cpp

HP-UX 11i v2 のオブジェクト形式は ELF であるため、+DD64 オプションを使用して LP64 コードを生成できます。ソース

于 2012-04-27T01:18:10.370 に答える