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  (Reini Urban <rurban@x-ray.at>)
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:

Previous
From: Greg Stark
Date:
Subject: Re: Increasing the length of pg_stat_activity.current_query...
Next
From: Tom Lane
Date:
Subject: Re: Increasing the length of pg_stat_activity.current_query...