In string.h in version 2.10.1 on line 546 & 550 there is a referance to __locale_t. __locale_t is defined in xlocale.h. xlocale.h is only included when __USE_XOPEN2K8 is true. Lines 544-552 thus including line 546 are only used when __USE_GNU is true. Given that xlocale.h is only included when __USE_XOPEN2K8 is true this lead to an error when __USE_XOPEN2K8 is false and __USE-GNU is false. Fix: Afther line 544 add: #include <xlocale.h> To have __locale_t defined when referenced. Regards, Alex Regards, Alex ========Dump form build GCC 4.4.1================================= In file included from ../../src/gcc-4.4.1/gcc/system.h:198, from ../../src/gcc-4.4.1/gcc/genmodes.c:22: /usr/include/string.h:546: error: expected declaration specifiers or '...' before '__locale_t' /usr/include/string.h:547: error: nonnull argument with out-of-range operand number (argument 1, operand 3) /usr/include/string.h:550: error: expected declaration specifiers or '...' before '__locale_t' /usr/include/string.h:551: error: nonnull argument with out-of-range operand number (argument 1, operand 4) In file included from /usr/include/sys/resource.h:25, from /usr/include/sys/wait.h:32, from ../../src/gcc-4.4.1/gcc/system.h:327, from ../../src/gcc-4.4.1/gcc/genmodes.c:22: /usr/include/bits/resource.h:127: error: two or more data types in declaration specifiers In file included from ../../src/gcc-4.4.1/gcc/genmodes.c:22: ../../src/gcc-4.4.1/gcc/system.h:426: error: conflicting types for 'getrlimit' /usr/include/sys/resource.h:51: note: previous declaration of 'getrlimit' was here ../../src/gcc-4.4.1/gcc/system.h:435: error: conflicting types for 'setrlimit' /usr/include/sys/resource.h:70: note: previous declaration of 'setrlimit' was here make[3]: *** [build/genmodes.o] Error 1 make[3]: Leaving directory `/bouwplek/gcc441/gcc' make[2]: *** [all-stage1-gcc] Error 2 make[2]: Leaving directory `/bouwplek/gcc441' make[1]: *** [stage1-bubble] Error 2 make[1]: Leaving directory `/bouwplek/gcc441' make: *** [all] Error 2 =================================================================
Sorry, Taken my time to create a complete bug report, Typing error. :-( It should read: Given that xlocale.h is only included when __USE_XOPEN2K8 is true this lead to an error when __USE_XOPEN2K8 is false and __USE_GNU is TRUE. Regards, Alex
When __USE_GNU is defined, __USE_XOPEN2K8 is always defined as well, unless you are expplicitly defining or undefining these macros, which you must not do. Use _GNU_SOURCE, _XOPEN_SOURCE {500,600,700,...}, etc. macros before including first header instead. See info libc 'Feature Test Macros'
(In reply to comment #2) > When __USE_GNU is defined, __USE_XOPEN2K8 is always defined as well, unless you > are expplicitly defining or undefining these macros, which you must not do. > Use _GNU_SOURCE, _XOPEN_SOURCE {500,600,700,...}, etc. macros before including > first header instead. See > info libc 'Feature Test Macros' This was a dump form building GCC 4.4.1. I am knowledgeable enough to provide a simple solution, but can not tell if this is an error in GCC 4.4.1 or glibc. If was not something I put together myself that I can easily fix.
running a gcc-4.4.1 on Red Hat Enterprise Linux 6 that was compiled on Red-Hat Enterprise Linux 5 resulted in a situation where gcc used its own modified versin of the RHEL5 features.h, resulting in the following error: #/usr/include/time.h:226: error: expected declaration specifiers or '...' #before '__locale_t In this situation, __USE_XOPEN2K8 indeed was unset while __USE_GNU was set.
Just noticed that http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52922 contains a good explanation of this.