Re: Build versionless .so for Android

Peter Eisentraut <peter@eisentraut.org>

From: Peter Eisentraut <peter@eisentraut.org>
To: Matthias Kuhn <matthias@opengis.ch>
Cc: Robert Haas <robertmhaas@gmail.com>, Michael Paquier <michael@paquier.xyz>, pgsql-hackers@lists.postgresql.org
Date: 2024-01-18T08:27:55Z
Lists: pgsql-hackers
On 14.01.24 12:37, Matthias Kuhn wrote:
> What I try to do is packaging an app with androiddeployqt which fails 
> with an error:
> 
> The bundled library lib/libpq.so.5 doesn't end with .so. Android only 
> supports versionless libraries ending with the .so suffix.
> 
> This error was introduced in response to this issue which contains hints 
> about the underlying problem:
> 
> https://bugreports.qt.io/plugins/servlet/mobile#issue/QTBUG-101346 
> <https://bugreports.qt.io/plugins/servlet/mobile#issue/QTBUG-101346>

I think the scenario there is using dlopen(), possibly via Qt, possibly 
via Java, so it's a very specific scenario, not necessarily indicative 
of a general requirement on Android, and apparently not using build-time 
linking.  It's quite conceivable that this issue would also exist with 
Qt on other platforms.

As I mentioned before, Meson has Android support.  Some people there 
clearly thought about it.  So I suggest you try building PostgreSQL for 
your Android environment using Meson and see what it produces.(*)  If 
the output files are the same as the autoconf/make build, then I would 
think your scenario is nonstandard.  If the output files are different, 
then we should check that and consider changes to get them to match.

It's of course possible that Meson is wrong, too, but then we need to 
have a broader analysis, because the implicit goal is to keep the two 
build systems for PostgreSQL consistent.

(*) - This means specifically that the installation trees produced by 
"make install-world-bin" and "meson install" should produce exactly the 
same set of files (same names in the same directories, not necessarily 
the same contents).




Commits

  1. Support shared libraries on Android (using make)

  2. meson: Map host_system android to linux

  3. meson: portname was set too early