mirror of
https://github.com/postgres/postgres.git
synced 2025-05-30 00:02:11 -04:00
We make each AIX shared library export all globals found in .o files that originate in the library. That doesn't include symbols acquired by -lpgcommon_shlib. That is good on average, but it became a problem for libpq when commit e6afa8918c461c1dd80c5063a950518fa4e950cd moved five official libpq API symbols into src/common. Fix this by implementing the SHLIB_EXPORTS mechanism for AIX, so affected libraries export the same symbols that they export on Linux. This reintroduces symbols pg_encoding_to_char, pg_utf_mblen, pg_char_to_encoding, pg_valid_server_encoding, and pg_valid_server_encoding_id. Back-patch to v13, where the aforementioned commit first appeared. While a minor release is usually the wrong time to add or remove symbol exports in libpq or libecpg, we should expect users to want each documented symbol. Tony Reix Discussion: https://postgr.es/m/PR3PR02MB6396742E2FC3E77D37A920BC86C79@PR3PR02MB6396.eurprd02.prod.outlook.com
33 lines
1.3 KiB
Plaintext
33 lines
1.3 KiB
Plaintext
src/port/README
|
|
|
|
libpgport
|
|
=========
|
|
|
|
libpgport must have special behavior. It supplies functions to both
|
|
libraries and applications. However, there are two complexities:
|
|
|
|
1) Libraries need to use object files that are compiled with exactly
|
|
the same flags as the library. libpgport might not use the same flags,
|
|
so it is necessary to recompile the object files for individual
|
|
libraries. This is done by removing -lpgport from the link line:
|
|
|
|
# Need to recompile any libpgport object files
|
|
LIBS := $(filter-out -lpgport, $(LIBS))
|
|
|
|
and adding infrastructure to recompile the object files:
|
|
|
|
OBJS= execute.o typename.o descriptor.o data.o error.o prepare.o memory.o \
|
|
connect.o misc.o path.o exec.o \
|
|
$(filter strlcat.o, $(LIBOBJS))
|
|
|
|
The problem is that there is no testing of which object files need to be
|
|
added, but missing functions usually show up when linking user
|
|
applications.
|
|
|
|
2) For applications, we use -lpgport before -lpq, so the static files
|
|
from libpgport are linked first. This avoids having applications
|
|
dependent on symbols that are _used_ by libpq, but not intended to be
|
|
exported by libpq. libpq's libpgport usage changes over time, so such a
|
|
dependency is a problem. Windows, Linux, AIX, and macOS use an export
|
|
list to control the symbols exported by libpq.
|