Author xdegaye
Recipients barry, dstufft, eric.araujo, lemburg, loewis, ncoghlan, piotr.dobrogost, pitrou, vstinner, xdegaye
Date 2019-04-26.20:34:56
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1556310896.88.0.681717096879.issue21536@roundup.psfhosted.org>
In-reply-to
Content
Thanks for fixing the regression Victor.

Here is another potential problem.

On Android API 24 built with NDK r19, symbol resolution fails in the _socket shared library after changeset 8c3ecc6bacc8d0cd534f2b5b53ed962dd1368c7b when python is built with '--enable-shared':

  generic_x86_64:/data/local/tmp/python $ python -c "import _socket"
  Traceback (most recent call last):
    File "<string>", line 1, in <module>
  ImportError: dlopen failed: cannot locate symbol "PyByteArray_Type" referenced by "/data/local/tmp/python/lib/python3.8/lib-dynload/_socket.cpython-38d.so"...

This does not happen when the build is configured without '--enable-shared'.

An NDK issue [1] reports the same problem and dimitry in this issue explains that on Android >= 23 the shared library must be linked against the shared library where the symbol is defined. Dimitry says that the Android loader was fixed in M (i.e. API 23) and it must refer to the changes listed in the "RTLD_LOCAL (Available in API level >= 23)" section of "Android changes for NDK developers" [2].

[1] https://github.com/android-ndk/ndk/issues/201
[2] https://android.googlesource.com/platform/bionic/+/android-n-mr2-preview-1/android-changes-for-ndk-developers.md
History
Date User Action Args
2019-04-26 20:34:56xdegayesetrecipients: + xdegaye, lemburg, loewis, barry, ncoghlan, pitrou, vstinner, eric.araujo, piotr.dobrogost, dstufft
2019-04-26 20:34:56xdegayesetmessageid: <1556310896.88.0.681717096879.issue21536@roundup.psfhosted.org>
2019-04-26 20:34:56xdegayelinkissue21536 messages
2019-04-26 20:34:56xdegayecreate