2012-01-11 2 views
6

Windows 7 x64 SUA/Interix 용 64 비트 GCC 컴파일러에서 grep을 컴파일 중입니다.stddef.h : 오류 : 중복 'unsigned'

stddef.h에 표시된 줄에 질식 : ... 이미 long을하는 것이 혼란

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). 

나는 원인이 무엇인지 이해가 안 :

#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 */ 

make에 대한 출력은 마치 GCC에서 64 비트처럼 사용되지만 오류는 훨씬 더 혼란 스럽습니다! 아이디어? 코드에서

+1

long과 비슷한 모양은 #include chain의 앞부분에서 서명이없는 것으로 정의되었습니다. –

+0

'size_t'가 매크로로 미리 정의 될 수 있습니까,'#define size_t unsigned int' 또는 어떤 것이 겠지만'_SIZE_T_DEFINED'가 정의되지 않았습니까? 문제가있는 줄은'typedef unsigned long unsigned int;'(또는 이와 유사한 것)와 같을 것이다. – ruakh

+0

당신들은 절대적으로 맞습니다 :) 포인터 덕분에 꽤 당황 스러웠습니다. – Mehrdad

답변

10

어딘가에, somone에 아마했다 : 그들은 그것을했을 때없이

그 라인을 따라
#define size_t unsigned long 

또는 뭔가, _SIZE_T_DEFINED을 정의하는 데. 그런 다음 오류 메시지에 나열된 경로를 통해 #includestddef.h 코드를 입력하십시오. 그러면 오류 라인이 다음과 같이 보입니다.

typedef unsigned long unsigned long; 

컴파일러가 작동하지 않을 것입니다!

+1

: 오, 참으로 grep (how meta ...)로 검색했고 :'./config.h:#define size_t unsigned int' ... 감사합니다! – Mehrdad

+0

autoconf는'size_t'를 매크로로 정의하기 위해 매우 오래된 컴파일러/구현을 가정해야합니다. – dreamlax

+0

@Mehrdad, 아무런 문제가 없습니다. 도와 줄 수있어서 기뻐! –