This is the mail archive of the
cygwin@cygwin.com
mailing list for the Cygwin project.
Re: gcc-2.95.3-5 on cygwin compilation problem
- From: swamp-dog at ntlworld dot com (Guy Harrison)
- To: <cygwin at cygwin dot com>
- Date: Sat, 17 Nov 2001 21:41:48 GMT
- Subject: Re: gcc-2.95.3-5 on cygwin compilation problem
- References: <DDENLHEIANHJBHNBDPBCMEFKCKAA.joe@aiobjects.com>
- Reply-to: swamp-dog at ntlworld dot com
On Thu, 15 Nov 2001 12:15:36 -0700, "Joe Graham" <joe@aiobjects.com>
wrote:
FWIW here's my stab at it...
There should be only one sys_errlist.
>Hello
>I ran into the following 2 problems when trying to build gcc-2.95.3-5 on
>cygwin and gcc-3.0. Both gave me the same problems in the same file. Below
>is how i got it to compile but I sure my implementation is probably wrong.
>Here goes.
>********
>error 1:
>********
>in file:
><gcc_source_directory>/libiberty/strerror.c
>../../gcc-2.95.3-5/libiberty/strerror.c:464: conflicting types for
>`sys_errlist
>/usr/include/sys/errno.h:23: previous declaration of `sys_errlist'
>make[1]: *** [strerror.o] Error 1
extern __IMPORT const char * const sys_errlist[];
Just about as 'const' as you can get.
>original:
>static const char **sys_errlist;
>fix:
>//static const char **sys_errlist;
>(commenting out the declaration fixes this)
Declaration here allows you to declare a "creatable" sys_errlist. The
system one above is effectively saying there already is one.
>********
>error 2:
>********
>in file:
><gcc_source_directory>/libiberty/strerror.c
>../../gcc-2.95.3-5/libiberty/strerror.c
>../../gcc-2.95.3-5/libiberty/strerror.c: In function `init_error_tables':
>../../gcc-2.95.3-5/libiberty/strerror.c:546: `sys_errlist' has an incomplete
>typ
>e
>original:
> if ((sys_errlist = (const char **) malloc (nbytes)) != NULL)
>fix:
> if ((sys_errlist[eip->value] = (const char **) malloc (nbytes)) !=
>NULL)
>(does this need to be eip->name ?)
I suspect there's nothing wrong and your fix is horribly broken.
>here's the diff
>464c464
>< //static const char **sys_errlist;
>---
>> static const char **sys_errlist;
>546c546
>< if ((sys_errlist[eip->value] = (const char **) malloc (nbytes)) !=
>NULL)
>
>---
>> if ((sys_errlist = (const char **) malloc (nbytes)) != NULL)
I've not compiled gcc but methinks there's two effective choices.
1) Compile against already existing 'sys_errlist'.
2) gcc creates its own 'sys_errlist'.
This is only a guess: you want option (1). Option (2) probably exists
for "bootstrapping" gcc.
I took a look at strerror.c and the problem code is conditional on
HAVE_SYSERRLIST - that must be undefined, at least at that point,
otherwise the problem would not have arisen. You need to discover why
(config.h - configure).
--
swamp-dog@ntlworld.com
--
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple
Bug reporting: http://cygwin.com/bugs.html
Documentation: http://cygwin.com/docs.html
FAQ: http://cygwin.com/faq/