Re: cygwin build failure - Mailing list pgsql-hackers
From | Bruce Momjian |
---|---|
Subject | Re: cygwin build failure |
Date | |
Msg-id | 200411080522.iA85M8M12031@candle.pha.pa.us Whole thread Raw |
In response to | Re: cygwin build failure (Bruce Momjian <pgman@candle.pha.pa.us>) |
Responses |
Re: cygwin build failure
|
List | pgsql-hackers |
OK, Andrew found the proper flag so Cygwin and MinGW linking will find the first matching library symbol (like Unix) and not error out because of multiple definitions. I have applied the following patch and removed the pg_dump Makefile hack we had before. --------------------------------------------------------------------------- Bruce Momjian wrote: > > I am all wrong on the following. It turns out we need a special linker > flag on Cygwin to allow the linker to link to the first available symbol > in the library (like Unix), and MinGW has a similar flag that we can use > to prevent the pg_dump/Makefile hack on MinGW too! > > Working on a patch now. > > --------------------------------------------------------------------------- > > Bruce Momjian wrote: > > Andrew Dunstan wrote: > > > > > > > > > Reini Urban wrote: > > > > > > >> > > > >> ... > > > >> >Info: resolving _optarg by linking to __imp__optarg (auto-import) > > > >> >Info: resolving _optind by linking to __imp__optind (auto-import) > > > > > > > > > > > > ok, i'm sure now. > > > > there's no way to ignore those diagnostics on the ld side. > > > > > > > > > It's a minor annoyance at worst. Not worth spending effort on. The > > > issue in these lines is the important one: > > > > > > ccache gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Wendif-labels -fno-strict-aliasing -g pg_dump.o common.opg_dump_sort.o pg_backup_archiver.o pg_backup_db.o pg_backup_custom.o pg_backup_files.o pg_backup_null.o pg_backup_tar.odumputils.o ../../../src/backend/parser/keywords.o -L../../../src/interfaces/libpq -lpq -L../../../src/port-L/usr/local/lib -lpgport -lz -lreadline -lcrypt -o pg_dump.exe > > > ../../../src/port/libpgport.a(pgstrcasecmp.o)(.text+0x1b0): In function `pg_tolower': > > > /home/adunstan/pgbf/root/HEAD/pgsql.4040/src/port/pgstrcasecmp.c:119: multiple definition of `_pg_tolower' > > > ../../../src/interfaces/libpq/libpq.a(dqgds00145.o)(.text+0x0): first defined here > > > > > > > Agreed. What could be the solution? I know it is caused by calling > > pg_strcasecmp in exec.c. > > > > I think I see it now. I added this to pg_dump/Makefile: > > > > # Not sure why MinGW needs this but it prevents a link failure > > # of duplicate definitions for pg_tolower(). 2004-10-06 > > ifeq ($(PORTNAME), win32) > > EXTRA_OBJS += $(top_builddir)/src/port/exec.o > > endif > > > > Now, the big question is if you remove this from the Makefile, does > > Cygwin compile OK, and if not, why does that fail? I am thinking we > > need to run ranlib on Cygwin to fix this properly. My BSD ranlib manual > > page has: > > > > --------------------------------------------------------------------------- > > > > ranlib [-v|-V] archive > > > > DESCRIPTION > > ranlib generates an index to the contents of an archive, > > and stores it in the archive. The index lists each symbol > > defined by a member of an archive that is a relocatable > > object file. > > > > An archive with such an index speeds up linking to the li- > > brary, and allows routines in the library to call each > > other without regard to their placement in the archive. > > > > The GNU ranlib program is another form of GNU ar; running > > ranlib is completely equivalent to executing `ar -s'. > > > > > > -- > > 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 > > > > ---------------------------(end of broadcast)--------------------------- > > TIP 5: Have you checked our extensive FAQ? > > > > http://www.postgresql.org/docs/faqs/FAQ.html > > > > -- > 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 > > ---------------------------(end of broadcast)--------------------------- > TIP 8: explain analyze is your friend > -- 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 Index: src/bin/pg_dump/Makefile =================================================================== RCS file: /cvsroot/pgsql/src/bin/pg_dump/Makefile,v retrieving revision 1.57 diff -c -c -r1.57 Makefile *** src/bin/pg_dump/Makefile 7 Oct 2004 13:45:48 -0000 1.57 --- src/bin/pg_dump/Makefile 8 Nov 2004 04:56:52 -0000 *************** *** 22,33 **** EXTRA_OBJS = $(top_builddir)/src/backend/parser/keywords.o - # Not sure why MinGW needs this but it prevents a link failure - # of duplicate definitions for pg_tolower(). 2004-10-06 - ifeq ($(PORTNAME), win32) - EXTRA_OBJS += $(top_builddir)/src/port/exec.o - endif - all: submake-libpq submake-libpgport submake-backend pg_dump pg_restore pg_dumpall pg_dump: pg_dump.o common.o pg_dump_sort.o $(OBJS) $(libpq_builddir)/libpq.a --- 22,27 ---- Index: src/template/cygwin =================================================================== RCS file: /cvsroot/pgsql/src/template/cygwin,v retrieving revision 1.4 diff -c -c -r1.4 cygwin *** src/template/cygwin 9 Oct 2003 14:40:36 -0000 1.4 --- src/template/cygwin 8 Nov 2004 04:56:55 -0000 *************** *** 1 **** --- 1,5 ---- SRCH_LIB="/usr/local/lib" + # This is required to link pg_dump because it finds pg_toupper() in + # libpq and pgport + LDFLAGS="-Wl,--allow-multiple-definition" + Index: src/template/win32 =================================================================== RCS file: /cvsroot/pgsql/src/template/win32,v retrieving revision 1.2 diff -c -c -r1.2 win32 *** src/template/win32 9 Oct 2003 03:20:34 -0000 1.2 --- src/template/win32 8 Nov 2004 04:56:56 -0000 *************** *** 0 **** --- 1,4 ---- + # This is required to link pg_dump because it finds pg_toupper() in + # libpq and pgport + LDFLAGS="-Wl,--allow-multiple-definition" +
pgsql-hackers by date: