Stddef.h: error: duplicate 'unsigned'

I am compiling grep in a 64-bit GCC compiler for Windows 7 x64 SUA / Interix.

It puts the highlighted line in 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 */ 

Output for make :

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

I don’t understand what the reason is ... it is already confusing that long used as if it is 64-bit in GCC, but the error is even more confusing! Ideas?

+6
source share
1 answer

Somewhere in your code was probably somone:

 #define size_t unsigned long 

Or something like that without specifying _SIZE_T_DEFINED when they did. Then their #include stddef.h code through the path specified in your error message. This makes your error line look like this:

 typedef unsigned long unsigned long; 

To a compiler that won't work!

+10
source

Source: https://habr.com/ru/post/905758/


All Articles