GeezerVison is showing github.com — Cross Compile for Android and issues with PyExc_OSError · Issue #111225 · python/cpython
Cross Compile for Android and issues with PyExc_OSError #111225DescriptionBug report
Bug description:
In trying to run Python 3.12 on Android. I have been cross-compiling Python for a number of years. Having built a 64bit version I am getting the following error when I try to run
I get the following error at runtime.
ImportError('dlopen failed: cannot locate symbol "PyExc_OSError" referenced by "/data/data/com.myapp/files/Python64/lib-dynload/_socket.cpython-312.so"...')
I have verified that the _socket.cpython-3.12.so exists. I'm not really sure what other info would be beneficial for people to help me understand this error so I will start with this and happily add more details if requested.
CPython versions tested on:
3.12
Operating systems tested on:
Other
Linked PRs
ActivityGRRedWings commented on Oct 27, 2023 I'm not sure if this is useful, but I did find this in the Android NDK 26 notes
Issue 360: thread_local variables with non-trivial destructors will cause segfaults if the containing library is dlcloseed. This was fixed in API 28, but code running on devices older than API 28 will need a workaround. The simplest fix is to stop calling dlclose. If you absolutely must continue calling dlclose, see the following table: mhsmith commented on Jan 16, 2024
Issue 360: thread_local variables with non-trivial destructors will cause segfaults if the containing library is dlcloseed
That doesn't seem relevant, because you're not seeing a segfault.
More likely, _socket.cpython-3.12.so has not been linked against libpython3.12.so. You can check this using readelf -d. erlend-aasland commented on Jan 16, 2024 GRRedWings commented on Jan 18, 2024 Here is the output I got from the readelf command. I'm not exactly sure how to read it, I do not see libpython3.12.so in there though, is this something I can change to link against it?
 mhsmith commented on Jan 18, 2024 I've just remembered, I also encountered this problem when building Python 3.12 for Chaquopy. I was able to fix it with this patch, which I'll turn into a pull request in the near future. GRRedWings commented on Jan 18, 2024 @mhsmith - Thanks for the update. I have tried your patch as is. Something is still different because it's looking for python3.12.so instead of libpython3.12.so.
I'm playing with your patch file, I'm not an expert but looking at it and trying to figure out what my build needs for some of your changes.
/android-ndk-r26b/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android26-clang -shared -L/python3-android/src/Python-3.12.1/Android/sysroot/usr/lib -pie Modules/arraymodule.o -lpython3.12 -o Modules/array.cpython-312.so
clang-17: warning: argument unused during compilation: '-pie' [-Wunused-command-line-argument]
ld.lld: error: unable to find library -lpython3.12 mhsmith commented on Jan 19, 2024 It doesn't say it's looking for python3.12.so, it says it's looking for -lpython3.12, which on Android, just like Linux, should be transformed into libpython3.12.so.
The issue is probably that this file doesn't exist in any of the -L directories on your command line. In particular, I see that the command line doesn't contain -L., even though that should have been assigned to BLDLIBRARY here when ac_sys_system=Linux-android:
|
Linux*|GNU*|NetBSD*|FreeBSD*|DragonFly*|OpenBSD*|VxWorks*) |
|
LDLIBRARY='libpython$(LDVERSION).so' |
|
BLDLIBRARY='-L. -lpython$(LDVERSION)' |
Are you sure you applied the whole patch? GRRedWings commented on Jan 19, 2024 I am pretty confident that I applied the entire patch. What I'm not sure is how I can tell if ac_sys_system is being set right. Is there a log or anything I could put into the configure? I tried using an echo and a printf, but not having any luck. GRRedWings commented on Jan 19, 2024 In looking at this more, and doing a before and after, I can see that it is trying to apply the patch, I don't see errors, but the configure patch is not being applied. I will look into this and make sure the patch is being applied. Sorry about that. mhsmith commented on Jan 21, 2024 I haven't looked at your build process, but maybe you're regenerating the configure script from the configure.ac file after applying the patch. GRRedWings commented on Jan 21, 2024 You are correct. I didn't realize the script I was using was doing an auto reconfigure, and I was applying the patch before this. Once I applied the patch in the proper place, things worked as expected.
I truly appreciate your help and time looking into this with me. mhsmith commented on Jan 21, 2024 That's great, but please reopen the issue, because the original bug still exists in an unpatched version of Python. GRRedWings commented on Jul 9, 2024 It's been a while, trying to build against 3.12.4, is this patch still needed? mhsmith commented on Jul 9, 2024 It's still needed on Python 3.12 and older, but it won't be needed in Python 3.13. GRRedWings commented on Jul 9, 2024 Perfect, I figured as much but wanted to be sure. I appreciate it.
MetadataMetadataDevelopmentNo branches or pull requestsIssue actions
|