Link errors on win32
After patching postmaster.c (see previous post) I'm unable to link on win32
(mingw). I get the following errors:
gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes -Wmissing-declaratio
ns -L../../src/port -o postgres.exe -Wl,--base-file,postgres.base
postgres.exp access/SUBSYS.o bootstrap/SUBSYS.o catalog/SUBSYS.o
parser/SUBSYS.o commands/SUBSYS.o executor/SUBSYS.o lib/SUBSYS.o
libpq/SUBSYS.o main/SUBSYS.o nodes/SUBSYS.o optimizer/SUBSYS.o port/SUBSYS.o
postmaster/SUBSYS.o regex/SUBSYS.o rewrite/SUBSYS.o storage/SUBSYS.o
tcop/SUBSYS.o utils/SUBSYS.o
../../src/timezone/SUBSYS.o -lz -lreadline -lwsock32 -lm -lpgport -lws2_32
executor/SUBSYS.o(.text+0x10417):nodeSeqscan.c: undefined reference to `nth'
executor/SUBSYS.o(.text+0x134a6):nodeSubqueryscan.c: undefined reference to
`nth'
port/SUBSYS.o(.text+0x3be):pg_sema.c: undefined reference to `pqkill'
storage/SUBSYS.o(.text+0x4363):fd.c: undefined reference to
`is_absolute_path'
storage/SUBSYS.o(.text+0x7fc5):pmsignal.c: undefined reference to `pqkill'
storage/SUBSYS.o(.text+0xd129):proc.c: undefined reference to `pqkill'
utils/SUBSYS.o(.text+0x24f58):not_in.c: undefined reference to `llast'
utils/SUBSYS.o(.text+0x24f70):not_in.c: undefined reference to `ltruncate'
utils/SUBSYS.o(.text+0x6c2cc):fmgr.c: undefined reference to `nth'
make[2]: *** [postgres] Error 1
make[2]: Leaving directory `/ws/pgsql/src/backend'
Regards,
Thomas Hallgren
After patching postmaster.c (see previous post) I'm unable to
link on win32 (mingw). I get the following errors:gcc -O2 -fno-strict-aliasing -Wall -Wmissing-prototypes
-Wmissing-declaratio
ns -L../../src/port -o postgres.exe -Wl,--base-file,postgres.base
postgres.exp access/SUBSYS.o bootstrap/SUBSYS.o
catalog/SUBSYS.o parser/SUBSYS.o commands/SUBSYS.o
executor/SUBSYS.o lib/SUBSYS.o libpq/SUBSYS.o main/SUBSYS.o
nodes/SUBSYS.o optimizer/SUBSYS.o port/SUBSYS.o
postmaster/SUBSYS.o regex/SUBSYS.o rewrite/SUBSYS.o
storage/SUBSYS.o tcop/SUBSYS.o utils/SUBSYS.o
../../src/timezone/SUBSYS.o -lz -lreadline -lwsock32 -lm
-lpgport -lws2_32
executor/SUBSYS.o(.text+0x10417):nodeSeqscan.c: undefined
reference to `nth'
executor/SUBSYS.o(.text+0x134a6):nodeSubqueryscan.c:
undefined reference to `nth'
port/SUBSYS.o(.text+0x3be):pg_sema.c: undefined reference to `pqkill'
storage/SUBSYS.o(.text+0x4363):fd.c: undefined reference to
`is_absolute_path'
storage/SUBSYS.o(.text+0x7fc5):pmsignal.c: undefined
reference to `pqkill'
storage/SUBSYS.o(.text+0xd129):proc.c: undefined reference to `pqkill'
utils/SUBSYS.o(.text+0x24f58):not_in.c: undefined reference to `llast'
utils/SUBSYS.o(.text+0x24f70):not_in.c: undefined reference
to `ltruncate'
utils/SUBSYS.o(.text+0x6c2cc):fmgr.c: undefined reference to `nth'
make[2]: *** [postgres] Error 1
make[2]: Leaving directory `/ws/pgsql/src/backend'
This looks like it's missing stuff from Bruces move from
backend/port/win32 to port/kill.c of the kill signal. Are you sure you
pulled a new version of the port directory as well? And did you do a
"make clean"?
IIRC, /port/ is not recompied if you just to "make" in the backend
directory. You could also try doing a manual maek in /port/ before you
make in backend.
Don't know about the list fubnctions like llast/ltruncate, but I bet
that could also show up if you didn't do "make clean".
//Magnus
Import Notes
Resolved by subject fallback
"Magnus Hagander" <mha@sollentuna.net> writes:
This looks like it's missing stuff from Bruces move from
backend/port/win32 to port/kill.c of the kill signal. Are you sure you
pulled a new version of the port directory as well? And did you do a
"make clean"?
I did a make clean. But it encountered an error and terminated prematurely
and I missed it...
make[2]: Entering directory `/ws/pgsql/contrib/earthdistance'
make[2]: *** No rule to make target `clean'. Stop.
make[2]: Leaving directory `/ws/pgsql/contrib/earthdistance'
make[1]: *** [clean] Error 2
make[1]: Leaving directory `/ws/pgsql/contrib'
make: *** [clean] Error 2
Anyway, I removed everything and downloaded a new fresh version, reapplied
my patch for postmaster.c, and recompiled. Everything links ok now.
Thanks,
Thomas Hallgren
"Thomas Hallgren" <thhal@mailblocks.com> writes:
I did a make clean. But it encountered an error and terminated prematurely
and I missed it...
make[2]: Entering directory `/ws/pgsql/contrib/earthdistance'
make[2]: *** No rule to make target `clean'. Stop.
make[2]: Leaving directory `/ws/pgsql/contrib/earthdistance'
make[1]: *** [clean] Error 2
make[1]: Leaving directory `/ws/pgsql/contrib'
make: *** [clean] Error 2
You must have a broken version of make. There certainly is a 'clean'
rule in that subdirectory, and it works for everyone else.
regards, tom lane
Tom Lane wrote:
"Thomas Hallgren" <thhal@mailblocks.com> writes:
I did a make clean. But it encountered an error and terminated prematurely
and I missed it...make[2]: Entering directory `/ws/pgsql/contrib/earthdistance'
make[2]: *** No rule to make target `clean'. Stop.
make[2]: Leaving directory `/ws/pgsql/contrib/earthdistance'
make[1]: *** [clean] Error 2
make[1]: Leaving directory `/ws/pgsql/contrib'
make: *** [clean] Error 2You must have a broken version of make. There certainly is a 'clean'
rule in that subdirectory, and it works for everyone else.regards, tom lane
Ah yes. Actually, this is the error I got once I manually created the
earthdistance directory in order for the clean to proceed. The first
time it failed, it was missing altogether.
- thomas
Thomas Hallgren wrote:
"Magnus Hagander" <mha@sollentuna.net> writes:
This looks like it's missing stuff from Bruces move from
backend/port/win32 to port/kill.c of the kill signal. Are you sure you
pulled a new version of the port directory as well? And did you do a
"make clean"?I did a make clean. But it encountered an error and terminated prematurely
and I missed it...make[2]: Entering directory `/ws/pgsql/contrib/earthdistance'
make[2]: *** No rule to make target `clean'. Stop.
make[2]: Leaving directory `/ws/pgsql/contrib/earthdistance'
make[1]: *** [clean] Error 2
make[1]: Leaving directory `/ws/pgsql/contrib'
make: *** [clean] Error 2Anyway, I removed everything and downloaded a new fresh version, reapplied
my patch for postmaster.c, and recompiled. Everything links ok now.
I did a gmake clean and gmake distclean from the top of CVS and it
worked fine for me.
--
Bruce Momjian | http://candle.pha.pa.us
pgman@candle.pha.pa.us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073
Bruce Momjian wrote:
Thomas Hallgren wrote:
"Magnus Hagander" <mha@sollentuna.net> writes:
This looks like it's missing stuff from Bruces move from
backend/port/win32 to port/kill.c of the kill signal. Are you sure you
pulled a new version of the port directory as well? And did you do a
"make clean"?I did a make clean. But it encountered an error and terminated prematurely
and I missed it...make[2]: Entering directory `/ws/pgsql/contrib/earthdistance'
make[2]: *** No rule to make target `clean'. Stop.
make[2]: Leaving directory `/ws/pgsql/contrib/earthdistance'
make[1]: *** [clean] Error 2
make[1]: Leaving directory `/ws/pgsql/contrib'
make: *** [clean] Error 2Anyway, I removed everything and downloaded a new fresh version, reapplied
my patch for postmaster.c, and recompiled. Everything links ok now.I did a gmake clean and gmake distclean from the top of CVS and it
worked fine for me.
I've encountered this before. You have to do a make that fails first,
then a make clean. On occation, the latter will fail. I'm not shure
exactly when or why this happens. My theory is that the make clean
assumes that some directories have been created when in fact they have
not since the original make failed prematurely.
- thomas
Thomas Hallgren <thhal@mailblocks.com> writes:
Ah yes. Actually, this is the error I got once I manually created the
earthdistance directory in order for the clean to proceed. The first
time it failed, it was missing altogether.
Ah. earthdistance is in a separate CVS module (a remnant of a failed
experiment in splitting up the distribution). IIRC, if you check out
"pgsql-server" rather than just "pgsql" you'll get this situation.
regards, tom lane
That might well be the reason! I did check out the pgsql-server. May I
suggest that a minor improvement to make the "make clean" a bit more
tolerant?
Kind regards,
- thomas
----- Original Message -----
From: "Tom Lane" <tgl@sss.pgh.pa.us>
To: "Thomas Hallgren" <thhal@mailblocks.com>
Cc: <pgsql-patches@postgresql.org>
Sent: Friday, May 28, 2004 20:54
Subject: Re: [PATCHES] Link errors on win32
Show quoted text
Thomas Hallgren <thhal@mailblocks.com> writes:
Ah yes. Actually, this is the error I got once I manually created the
earthdistance directory in order for the clean to proceed. The first
time it failed, it was missing altogether.Ah. earthdistance is in a separate CVS module (a remnant of a failed
experiment in splitting up the distribution). IIRC, if you check out
"pgsql-server" rather than just "pgsql" you'll get this situation.regards, tom lane
"Thomas Hallgren" <thhal@mailblocks.com> writes:
That might well be the reason! I did check out the pgsql-server. May I
suggest that a minor improvement to make the "make clean" a bit more
tolerant?
I'd rather lobby Marc to re-merge the CVS modules.
regards, tom lane
Import Notes
Reply to msg id not found: thhal-05ySTAUWfZhIQ+bKOeUmOOUoUXNEfuc@mailblocks.com
You must have a broken version of make. There certainly is a 'clean'
rule in that subdirectory, and it works for everyone else.regards, tom lane
Ah yes. Actually, this is the error I got once I manually created the
earthdistance directory in order for the clean to proceed. The first
time it failed, it was missing altogether.
That's normal - the CVS repo for that contrib is totally broken. I just
remove the earthdistance line from the contrib/Makefile.
Chris