Skip to content

Cross Compile for Android and issues with PyExc_OSError #111225

Description

@GRRedWings

Bug 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

Activity

  1. GRRedWings commented on Oct 27, 2023

    @GRRedWings
    Author

    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:

  2. mhsmith commented on Jan 16, 2024

    @mhsmith
    Member

    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.

  3. erlend-aasland commented on Jan 16, 2024

    @erlend-aasland
    Contributor

    @mhsmith, based on your comment, can we close this issue as not-planned?

  4. added
    pendingThe issue will be closed if no feedback is provided
    on Jan 16, 2024
  5. GRRedWings commented on Jan 18, 2024

    @GRRedWings
    Author

    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?

    image
  6. mhsmith commented on Jan 18, 2024

    @mhsmith
    Member

    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.

  7. removed
    pendingThe issue will be closed if no feedback is provided
    on Jan 18, 2024
  8. GRRedWings commented on Jan 18, 2024

    @GRRedWings
    Author

    @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

  9. mhsmith commented on Jan 19, 2024

    @mhsmith
    Member

    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:

    cpython/configure

    Lines 7500 to 7502 in 2305ca5

    Linux*|GNU*|NetBSD*|FreeBSD*|DragonFly*|OpenBSD*|VxWorks*)
    LDLIBRARY='libpython$(LDVERSION).so'
    BLDLIBRARY='-L. -lpython$(LDVERSION)'

    Are you sure you applied the whole patch?

  10. GRRedWings commented on Jan 19, 2024

    @GRRedWings
    Author

    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.

  11. GRRedWings commented on Jan 19, 2024

    @GRRedWings
    Author

    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.

  12. mhsmith commented on Jan 21, 2024

    @mhsmith
    Member

    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.

  13. GRRedWings commented on Jan 21, 2024

    @GRRedWings
    Author

    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.

  14. mhsmith commented on Jan 21, 2024

    @mhsmith
    Member

    That's great, but please reopen the issue, because the original bug still exists in an unpatched version of Python.

  15. added a commit that references this issue on Feb 21, 2024
  16. added a commit that references this issue on Mar 4, 2024
  17. added a commit that references this issue on Apr 17, 2024
  18. GRRedWings commented on Jul 9, 2024

    @GRRedWings
    Author

    It's been a while, trying to build against 3.12.4, is this patch still needed?

  19. mhsmith commented on Jul 9, 2024

    @mhsmith
    Member

    It's still needed on Python 3.12 and older, but it won't be needed in Python 3.13.

  20. GRRedWings commented on Jul 9, 2024

    @GRRedWings
    Author

    Perfect, I figured as much but wanted to be sure. I appreciate it.

  21. added a commit that references this issue on Jan 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    OS-androidbuildThe build process and cross-buildtype-bugAn unexpected behavior, bug, or error

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions