My test.cpp is just a stupid program like this:
#include <iostream.h>
void main()
{
for(int i = 0; i < 11; i++)
cout << i << endl;
}
[root@localhost /root]# gcc test.cpp
In file included from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/_G_config.h:9,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:31,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:36,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:31,
from test.cpp:1:
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/include/gnu/types.h:4:
gnu/types.h: No such file or directory
Here's my
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/include/gnu/types.h:
/* This file fixes __FD_ZERO bug for glibc-1.x. */
#ifndef _TYPES_H_WRAPPER
#include <features.h>
#include_next <gnu/types.h>
#if defined(__FD_ZERO) && !defined(__GLIBC__)
#undef __FD_ZERO
# define __FD_ZERO(fdsetp) \
do { \
int __d0, __d1; \
__asm__ __volatile__("cld ; rep ; stosl" \
: "=&c" (__d0), "=&D" (__d1) \
: "a" (0), "0" (__FDSET_LONGS), \
"1" ((__fd_set *) (fdsetp)) :"memory"); \
} while (0)
#endif
#define _TYPES_H_WRAPPER
#endif /* _TYPES_H_WRAPPER */
Q
I created a link in /usr/include/gnu to the former,
[root@localhost /root]# gcc test.cpp
In file included from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/include/gnu/types.h:4,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/_G_config.h:9,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:31,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:36,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:31,
from test.cpp:1:
/usr/include/gnu/types.h:4: No include path in which to find gnu/types.h
What's the difference between
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/include/gnu/types.h and
/usr/include/gnu/types.h?
I copied /usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/include/gnu/types.h
to /usr/include/gnu and remarked the fourth line,
[root@localhost /root]# gcc test.cpp
In file included from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/_G_config.h:13,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:31,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:36,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:31,
from test.cpp:1:
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/include/stddef.h:170: syntax
error before `typedef'
In file included from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:36,
from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:31,
from test.cpp:1:
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:210:
syntax error before `;'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:237:
`read' was not declared in this scope
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:237:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:237:
function `int __ssize_t(_IO_FILE *, void *)' is initialized like a
variable
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:238:
`write' was not declared in this scope
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:238:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:238:
function `int __ssize_t(_IO_FILE *, const void *)' is initialized like a
variable
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:238:
declaration of C function `int __ssize_t(_IO_FILE *, const void *)'
conflicts with
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:237:
previous declaration `int __ssize_t(_IO_FILE *, void *)' here
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:239:
`seek' was not declared in this scope
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:239:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:239:
function `int __off_t(_IO_FILE *, int)' is initialized like a variable
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:240:
invalid exception specifications
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:318:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:319:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:321:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/libio.h:322:
syntax error before `('
In file included from
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:31,
from test.cpp:1:
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:77:
syntax error before `;'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:78:
syntax error before `;'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:80:
syntax error before `;'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:133:
parse error before `;'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:356:
`streamsize' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:356:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:357:
`streamsize' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:357:
declaration of `int streambuf::streamsize'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:356:
conflicts with previous declaration `int streambuf::streamsize'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:357:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:358:
`streampos' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:358:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:359:
`streampos' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:359:
declaration of `int streambuf::streampos'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:358:
conflicts with previous declaration `in
t streambuf::streampos'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:359:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:361:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:357:
duplicate member `streambuf::streamsize'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:359:
duplicate member
`streambuf::streampos'/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:363:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:365:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:366:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:367:
virtual outside class declaration
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:368:
virtual outside class declaration
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:369:
virtual outside class declaration
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int unbuffered()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:374:
`_flags' undeclared (first use this function)
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:374:
(Each undeclared identifier is reported only once
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:374:
for each function it appears in.)
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int allocate()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:381:
implicit declaration of function `int base(...)'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `void allocbuf()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:384:
warning: NULL used in arithmetic
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:384:
implicit declaration of function `int doallocbuf(...)'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int in_avail()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:386:
`_IO_read_end' undeclared (first use this function)
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:386:
`_IO_read_ptr' undeclared (first use this function)
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int out_waiting()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:387:
`_IO_write_ptr' undeclared (first use this function)
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:387:
`_IO_write_base' undeclared (first use this function)
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
At top level:
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:388:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:389:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:390:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:394:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:394:
parse error before `,'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int sputc(int)':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:395:
invalid use of `this' in non-member function
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int sbumpc()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:396:
invalid use of `this' in non-member function
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int sgetc()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:397:
invalid use of `this' in non-member function
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
In function `int snextc()':
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:399:
invalid use of `this' in non-member function
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:
At top level:
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:411:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:412:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:413:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:414:
virtual outside class declaration
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:415:
virtual outside class declaration
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:420:
parse error before `}'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:446:
`streampos' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:446:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:448:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:449:
syntax error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:458:
`streamsize' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:458:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:459:
`streampos' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:459:
declaration of `int filebuf::streampos'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:446:
conflicts with previous declaration `int filebuf::streampos'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:459:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:460:
`streamsize' declared as a `virtual' field
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:460:
declaration of `int filebuf::streamsize'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:458:
conflicts with previous declaration `int filebuf::streamsize'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:460:
parse error before `('
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:459:
duplicate member `filebuf::streampos'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:460:
duplicate member `filebuf::streamsize'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/streambuf.h:489:
parse error before `}'
In file included from test.cpp:1:
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:64:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:64:
parse error before `)'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:65:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:65:
parse error before `)'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:66:
`ostream::write(...)' has already been declared in `ostream'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:67:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:67:
parse error before `)'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:68:
`ostream::write(...)' has already been declared in `ostream'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:69:
type specifier omitted for parameter
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:69:
parse error before `)'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:70:
`ostream::write(...)' has already been declared in `ostream'
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:71:
`streampos' was not declared in this scope
/usr/lib/gcc-lib/i586-mandrake-linux/2.95.2/../../../../include/g++-3/iostream.h:71:
confused by earlier errors, bailing out