Link errors on win32

Started by Thomas Hallgrenabout 22 years ago11 messagespatches
Jump to latest
#1Thomas Hallgren
thhal@mailblocks.com

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

#2Magnus Hagander
magnus@hagander.net
In reply to: Thomas Hallgren (#1)
Re: 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'

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

#3Thomas Hallgren
thhal@mailblocks.com
In reply to: Magnus Hagander (#2)
Re: Link errors on win32

"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

#4Tom Lane
tgl@sss.pgh.pa.us
In reply to: Thomas Hallgren (#3)
Re: Link errors on win32

"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

#5Thomas Hallgren
thhal@mailblocks.com
In reply to: Tom Lane (#4)
Re: Link errors on win32

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 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

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

#6Bruce Momjian
bruce@momjian.us
In reply to: Thomas Hallgren (#3)
Re: Link errors on win32

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 2

Anyway, 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
#7Thomas Hallgren
thhal@mailblocks.com
In reply to: Bruce Momjian (#6)
Re: Link errors on win32

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 2

Anyway, 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

#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Thomas Hallgren (#5)
Re: Link errors on win32

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

#9Thomas Hallgren
thhal@mailblocks.com
In reply to: Magnus Hagander (#2)
Re: Link errors on win32

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

#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Magnus Hagander (#2)
Re: Link errors on win32

"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

#11Christopher Kings-Lynne
chriskl@familyhealth.com.au
In reply to: Thomas Hallgren (#5)
Re: Link errors on win32

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