Re: AIX compilation problems (was Re: Proposal ...)
Zeugswetter Andreas ADI SD <zeugswettera@spardat.at>
From: "Zeugswetter Andreas SB SD" <ZeugswetterA@spardat.at>
To: "Peter Eisentraut" <peter_e@gmx.net>
Cc: "PostgreSQL Development" <pgsql-hackers@postgresql.org>
Date: 2002-10-01T08:23:13Z
Lists: pgsql-hackers
> > Attached is a patch to fix the mb linking problems on AIX. As a nice side effect > > it reduces the duplicate symbol warnings to linking libpq.so and libecpg.so > > (all shlibs that are not postmaster loadable modules). > > Can you explain the method behind your patch? Have you tried -bnogc? -bnogc would (probably) have been the correct switch reading the man page, but the method was previously not good since it involved the following: 1. create a static postgres executable from the SUBSYS.o's 2. create an exports file from above 3. recreate a shared postgres executable This naturally had a cyclic dependency, that could not properly be reflected in the Makefile (thus a second make sometimes left you with a static postgres unless you manually removed postgres.imp). Now it does: postgres.imp: $(OBJS) create a temporary SUBSYS.o from all $(OBJS) create a postgres.imp from SUBSYS.o rm temporary SUBSYS.o postgres: postgres.imp link a shared postgres A second change was to move the import and export files to the end of the link line, then the linker knows not to throw a duplicate symbol warning, and keeps all symbols that are mentioned in the exports file (== -bnogc restricted to $(OBJS) symbols). Thus now only libpq.so and libecpg.so still show the duplicate symbol warnings since their link line should actually not include postgres.imp . I did not see how to make a difference between loadable modules (need postgres.imp) and interface libraries (do not need postgres.imp), but since the resulting libs are ok, I left it at that. I tested both gcc and xlc including regression tests. Andreas