Sunday, April 15, 2007

cygwin header file bug?

剛剛試著在自己的NB上面編himax-cc
偶然間發現一個似乎是cygwin bug的敘述

問題出現在/usr/include/cygwin/types.h
其中
#ifndef __u_int8_t_defined
#define __u_int8_t_defined
typedef unsigned char u_int8_t;
#endif
#ifndef __u_int16_t_defined
#define __u_int16_t_defined
typedef __u_int16_t u_int16_t;
#endif
#ifndef __u_int32_t_defined
#define __u_int32_t_defined
typedef __u_int32_t u_int32_t;
#endif
#ifndef __u_int64_t_defined
#define __u_int64_t_defined
typedef __u_int64_t u_int64_t;
#endif

問題出現在__u_int16_t, __u_int32_t, __u_int64_t並未在之前被定義
所以compiler在跑這一段的時候還是不知道到底u_int16_t, u_int32_t, u_int64_t到底應該用什麼樣的type來組合
因此對照/usr/include/sys/types.h中的敘述
我試著把它改成如下

#ifndef __u_int8_t_defined
#define __u_int8_t_defined
typedef unsigned char u_int8_t;
#endif
#ifndef __u_int16_t_defined
#define __u_int16_t_defined
typedef unsigned short u_int16_t;
#endif
#ifndef __u_int32_t_defined
#define __u_int32_t_defined
typedef unsigned int u_int32_t;
#endif
#ifndef __u_int64_t_defined
#define __u_int64_t_defined
typedef unsigned long long u_int64_t;
#endif

就可以動了
不過我懷疑這是cygwin的一個bug