Обсуждение: PostgreSQL 7.1.3 vs. gcc 2.95.4 and GNU libc 2.2.4
Hi,
trying to compile PostgreSQL 7.1.3 (my system: Linux Debian-ish,
fairly new Gnu libc (where I think the problem resides):
gcc 2.95.4 and GNU libc 2.2.4 bails out at:
| input.c: In function `initializeInput':
| input.c:157: warning: passing arg 1 of `on_exit' from incompatible pointer type
| input.c:157: too few arguments to function `on_exit'
| make[3]: *** [input.o] Error 1
| make[3]: Leaving directory `/usr/local/src/postgresql-7.1.3/src/bin/psql'
| make[2]: *** [all] Error 2
Here's input.c around line 157:
| #ifdef HAVE_ATEXIT
| atexit(finishInput);
| #else
| on_exit(finishInput);
| #endif
and here's the prototype from my man(3) on_exit:
| int on_exit(void (*function)(int , void *), void *arg);
Modifying the call in input.c in the obvious way(1) solves the problem
for me, but I'm not an Autoconfiguru and besides I have no clue about
how portable or universal on_exit() is -- so I have no intelligent
patch to submit (I'd like to).
---
(1) on_exit(finishInput, NULL); it complains about incompatible pointer
type, because of the different function prototype of finishInput, but
it works.
Cheers
-- tomas
tomas@fabula.de writes: > trying to compile PostgreSQL 7.1.3 (my system: Linux Debian-ish, > fairly new Gnu libc (where I think the problem resides): > gcc 2.95.4 and GNU libc 2.2.4 bails out at: > > | input.c: In function `initializeInput': > | input.c:157: warning: passing arg 1 of `on_exit' from incompatible pointer type > | input.c:157: too few arguments to function `on_exit' > | make[3]: *** [input.o] Error 1 > | make[3]: Leaving directory `/usr/local/src/postgresql-7.1.3/src/bin/psql' > | make[2]: *** [all] Error 2 I have installed a fix for this in the development sources; I understand that you were able to fix this yourself. The more interesting question is why it's trying to use on_exit() when it should be using atexit(). If you're interested, you can try to look through config.log to see what's happening with the atexit test. -- Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter
On Wed, Sep 12, 2001 at 01:16:17AM +0200, Peter Eisentraut wrote:
> tomas@fabula.de writes:
>
> > trying to compile PostgreSQL 7.1.3 (my system: Linux Debian-ish,
> > fairly new Gnu libc (where I think the problem resides):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
For once, my gut feeling was right.
> I have installed a fix for this in the development sources; I understand
> that you were able to fix this yourself.
Yes, I'm a happy camper.
> The more interesting question is why it's trying to use on_exit() when it
> should be using atexit(). If you're interested, you can try to look
> through config.log to see what's happening with the atexit test.
Stupid as it may sound, I lost my atexit() ;-)
Watch this:
| slon:/home/spu > vim blub.c
|
| --( blub.c )---------------------------
| #include <stdio.h>
| #include <stdlib.h>
|
| void scream(void)
| {
| fprintf(stderr, "AAAARRRGH!\n");
| }
|
| int main(int argc, char *argv[])
| {
| atexit(scream);
| }
| ---------------------------------------
|
| slon:/home/spu > make blub
| cc blub.c -o blub
| /tmp/ccmhreih.o: In function `main':
| /tmp/ccmhreih.o(.text+0x2f): undefined reference to `atexit'
| collect2: ld returned 1 exit status
| make: *** [blub] Error 1
| slon:/home/spu >
So I think PostgreSQL's configure is not to blame for not finding it;
I think it's rather my gcc/libc combination. I guess it's a lesson
to distribution packagers: upgrading a libc is harder than it even
looks.
Do you think I should file a bug with Debian?
They seem to have noticed already (the proposed fix was to upgrade
gcc/cpp, which I did. Before that compile didn't work at all --
I guess I hadn't either atexit() nor on_exit() then).
Thanks a lot
-- tomas