Tôi đang biên dịch grep
trên trình biên dịch GCC 64 bit cho Windows 7 x64 SUA/Interix.stddef.h: lỗi: duplicate 'unsigned'
Nó nghẹn trên dòng rõ rệt trong stddef.h
:
#ifndef _SIZE_T_DEFINED
#if defined (lp64) || defined(_WIN64)
#ifdef lp64
typedef unsigned long size_t; // <------ error
#else /* lp64 */
typedef unsigned __int64 size_t;
#endif /* lp64 */
#else /* (defined(lp64) || defined(_WIN64)) */
typedef unsigned int size_t;
#endif /* (defined(lp64) || defined(_WIN64)) */
#define _SIZE_T_DEFINED
#define _SIZE_T
#endif /* _SIZE_T_DEFINED */
Kết quả cho make
là:
make all-recursive
Making all in intl
gcc -c -DLOCALEDIR=\"/usr/local/share/locale\" -DLOCALE_ALIAS_PATH=\"/usr/local/share/locale\" -DLIBDIR=\"/usr/local/lib\" -DIN_LIBINTL -DHAVE_CONFIG_H -I.. -I. -I../../intl -D_ALL_SOURCE -D_REENTRANT -I/usr/local/include -I/usr/local/include -D_ALL_SOURCE -D_REENTRANT ../../intl/intl-compat.c
In file included from ../../intl/gettextP.h:23:0,
from ../../intl/intl-compat.c:25:
/usr/include/stddef.h:50:23: error: duplicate 'unsigned'
*** Error code 1
Stop in /tmp/grep-2.5.4-src/build/intl.
*** Error code 1
Stop in /tmp/grep-2.5.4-src/build (line 329 of Makefile).
*** Error code 1
Stop in /tmp/grep-2.5.4-src/build (line 244 of Makefile).
Tôi không hiểu những gì nguyên nhân là ... nó đã nhầm lẫn rằng long
đang được sử dụng như thể nó là 64-bit trong GCC, nhưng lỗi thậm chí còn khó hiểu hơn! Ý tưởng?
Có vẻ như lâu đã đượC#defined để bỏ dấu ở đâu đó trước đó trong chuỗi bao gồm. –
Có thể 'size_t' được định nghĩa trước là macro, nói' #define size_t unsigned int' hay gì đó, nhưng '_SIZE_T_DEFINED' không được xác định? Sau đó, dòng có vấn đề sẽ tương đương với 'typedef unsigned long unsigned int;' (hoặc tương tự), sẽ kích hoạt thông báo lỗi đó. – ruakh
Các bạn hoàn toàn đúng :) cảm ơn vì con trỏ, nó khá là khó hiểu. – Mehrdad