Subject: Re: _POSIX_C_SOURCE 199309L and when to use _NETBSD_SOURCE?
To: None <reed@reedmedia.net>
From: Ben Harris <bjh21@netbsd.org>
List: current-users
Date: 12/18/2006 14:18:29
In article <Pine.NEB.4.64.0612151313590.25512@glacier.reedmedia.net> you write:
>I didn't get any feedback.
>
>I have done more research.
>
>Are our headers broken? This is NetBSD/i386 3.99.24.
>
>> > /usr/include/unistd.h:321: error: expected declaration specifiers or '...' before 'u_int'
>> > In file included from ../include/misc.h:143,
>> > from utils.c:83:
>> > /usr/include/stdlib.h:246: error: expected ')' before '*' token
>
>u_char is unknown. It is defined in /usr/include/sys/types.h:
I don't understand this. Both of those lines are inside
"#ifdef _NETBSD_SOURCE" blocks, so they shouldn't be visible unless
_NETBSD_SOURCE is defined, but if it were defined, <sys/types.h> would
have defined the requisite types. This suggests to me that something,
maybe a badly broken system header or maybe your application, is
defining _NETBSD_SOURCE in between <sys/types.h> and <unistd.h>.
>> > In file included from utils.c:102:
>> > /usr/include/signal.h:69: error: expected ')' before 'int'
>
>pthread_t is unknown. It is defined in /usr/include/pthread_types.h which
>is is included by /usr/include/pthread.h and /usr/include/sys/types.h.
>The sys/types.h only pulls it in like:
>
>#if !defined(_KERNEL) && !defined(_STANDALONE)
>#if (_POSIX_C_SOURCE - 0L) >= 199506L || (_XOPEN_SOURCE - 0) >= 500 || \
> defined(_NETBSD_SOURCE)
>#include <pthread_types.h>
>#endif
>#endif
Again, those are precisely the conditions around the declaration of
pthread_kill(), so something's mangling your preprocessor macros
between <sys/types.h> and <signal.h>.
You might find it useful to use the -H option of GCC to find out
precisely which header files are being used and then search them for
mistaken definitions.
--
Ben Harris