Description of problem: System include files have conflicting definitions for sigset_t, preventing legitimate code from compiling. Version-Release number of selected component (if applicable): How reproducible: 100% Steps to Reproduce: 1. Create the following file, named repro.cpp: #include <sys/types.h> #include <sys/io.h> #include <stdio.h> #include <pthread.h> int main( int argc, char *argv[] ) { printf("foo.\n"); } 2. run the following command g++ -O2 -Wall -I/usr/src/linux-2.4/include/asm-i386 -I../include -I/usr/include -c -o repro.o repro.cpp Actual results: In file included from /usr/include/pthread.h:24, from repro.cpp:4: /usr/src/linux-2.4/include/asm-i386/signal.h:27: conflicting types for `typedef long unsigned int sigset_t' /usr/include/sys/select.h:38: previous declaration as `typedef struct __sigset_t sigset_t' Expected results: No errors. Additional info:
Not a gcc bug.
This is all your fault. You add -I/usr/src/linux-2.4/include/asm-i386 and expect things to work. The files in this directory are no replacement for the libc files. Never use such an -I parameter.