Hi Noah,

Yes, trying to use the create lib$(NAME).exp from $(SHLIB_EXPORTS) when it 
exists was my first idea, too.
However, I do not master (or I forgot) this kind of "if...." in a Makefile and 
I was unable to find a solution by reading Makefile manuals or by searching for 
a similar example. So, I did it in an easier (to me!) and quicker way: merge 
with a new command line in the Makefile rule.
Now that we have a clear understanding of what is happenning, I may have a 
deeper look at a clean Makefile solution. However, if you know how to manage 
this, I would really appreciate some example. I'm asking my colleague too if he 
can help me here.

Thx

Tony

________________________________
De : Noah Misch <n...@leadboat.com>
Envoyé : lundi 30 août 2021 16:52
À : REIX, Tony <tony.r...@atos.net>
Cc : pgsql-hackers@lists.postgresql.org <pgsql-hackers@lists.postgresql.org>
Objet : Re: AIX: Symbols are missing in libpq.a

Caution! External email. Do not open attachments or click links, unless this 
email comes from a known sender and you know the content is safe.

On Mon, Aug 30, 2021 at 02:33:32PM +0000, REIX, Tony wrote:
> It appears that the Makefile in src/interfaces/libpq has been modified 
> between v12 and v13, removing encnames.o (and wchar.o) from the object files 
> being used for creating the static libpq.a file which is used for creating 
> the libpq.so and libpq.a AIX shared-library files.
> And, since pg_encoding_to_char() is defined in encnames.o , it has 
> disappeared from the libpq.exp file .
>
> # diff postgresql-12.8/32bit/src/interfaces/libpq/Makefile 
> postgresql-13.1/32bit/src/interfaces/libpq/Makefile | grep encnames
> < OBJS += encnames.o wchar.o
> < encnames.c wchar.c: % : $(backend_src)/utils/mb/%
> <       rm -f encnames.c wchar.c
>
> Remember how the final libpq.a is built on AIX:
>
>  rm -f libpq.a
>  /usr/bin/ar crs libpq.a fe-auth-scram.o ...
>  touch libpq.a
>  ../../../src/backend/port/aix/mkldexport.sh libpq.a libpq.so.5 >libpq.exp
>  /opt/freeware/bin/gcc  -maix64    -O3 .....  -o libpq.so.5 libpq.a 
> -Wl,-bE:libpq.exp .......
>  rm -f libpq.a
>  /usr/bin/ar crs libpq.a libpq.so.5
>
>  12.8 : /usr/bin/ar crs libpq.a fe-auth.o fe-auth-scram.o fe-connect.o 
> fe-exec.o fe-lobj.o fe-misc.o fe-print.o fe-protocol2.o fe-protocol3.o
>                                 pqexpbuffer.o fe-secure.o legacy-pqsignal.o 
> libpq-events.o encnames.o wchar.o fe-secure-openssl.o fe-secure-common.o
>
>  13.1 : /usr/bin/ar crs libpq.a fe-auth.o fe-auth-scram.o fe-connect.o 
> fe-exec.o fe-lobj.o fe-misc.o fe-print.o fe-protocol2.o fe-protocol3.o
>                                 pqexpbuffer.o fe-secure.o legacy-pqsignal.o 
> libpq-events.o                    fe-secure-common.o fe-secure-openssl.o
>
>
> Maybe you can discover why these changes were made in v13 for 
> src/interfaces/libpq/Makefile .
> And  mkldexport.sh  , unchanged between v12 and v13, works perfectly.

Thanks; that makes sense.  Those files moved to libpgcommon_shlib.a.  The
$(MKLDEXPORT) call sees symbols in the .o files, but it doesn't see symbols
pulled in via libpg*.a.  Let's fix this by having Makefile.shlib skip
$(MKLDEXPORT) when a $(SHLIB_EXPORTS) file is available and have it instead
create lib$(NAME).exp from $(SHLIB_EXPORTS).  That's more correct than
merging, and it's simpler.  Would you like to try that?

Reply via email to