Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ImportError: dlopen failed: cannot locate symbol "_Py_NoneStruct" referenced by [...]/gevent/__hub_local.so" #2037

Closed
emibcn opened this issue Dec 8, 2019 · 7 comments

Comments

@emibcn
Copy link

emibcn commented Dec 8, 2019

Versions

Description

What are you trying to get done

Create an APK with a Python Kivy app which includes, among others, Python's gevent module, which depends on _Py_NoneStruct symbol (not found).

What has happened and What went wrong

Building process finished correctly (I have the APK).
Execution process ended before the app is fully loaded with error message:
ImportError: dlopen failed: cannot locate symbol "_Py_NoneStruct" referenced by "/data/data/org.test.myapp/files/app/_python_bundle/site-packages/gevent/__hub_local.so"...

What did you expect

I expected the app to run smoothly as it does on Linux ;)

Short & runnable App

testerror.zip

buildozer.spec

Command:

buildozer android clean debug

Spec file:

[app]

# (str) Title of your application
title = My App

# (str) Package name
package.name = myapp

# (str) Package domain (needed for android/ios packaging)
package.domain = org.test

# (str) Source code where the main.py live
source.dir = ./src/

# (list) Source files to include (let empty to include all the files)
source.include_exts = py,png,jpg,kv,atlas

# (list) List of inclusions using pattern matching
source.include_patterns = data/*

# (list) Source files to exclude (let empty to not exclude anything)
#source.exclude_exts = spec

# (list) List of directory to exclude (let empty to not exclude anything)
source.exclude_dirs = tests, bin, build

# (list) List of exclusions using pattern matching
#source.exclude_patterns = license,images/*/*.jpg

# (str) Application versioning (method 1)
version = 0.1

# (str) Application versioning (method 2)
# version.regex = __version__ = ['"](.*)['"]
# version.filename = %(source.dir)s/main.py

# (list) Application requirements
# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy,parallel-ssh,argparse,six,openssl,cffi,cryptography,gevent                                                                                                                                                      
                                                                                                                                                                                                                                            
# (str) Custom source folders for requirements                                                                                                                                                                                              
# Sets custom source for any requirements with recipes                                                                                                                                                                                      
# requirements.source.kivy = ../../kivy                                                                                                                                                                                                     
                                                                                                                                                                                                                                            
# (list) Garden requirements                                                                                                                                                                                                                
#garden_requirements =                                                                                                                                                                                                                      
                                                                                                                                                                                                                                            
# (str) Presplash of the application                                                                                                                                                                                                        
#presplash.filename = %(source.dir)s/data/presplash.png                                                                                                                                                                                     
                                                                                                                                                                                                                                            
# (str) Icon of the application                                                                                                                                                                                                             
#icon.filename = %(source.dir)s/data/icon.png                                                                                                                                                                                               
                                                                                                                                                                                                                                            
# (str) Supported orientation (one of landscape, sensorLandscape, portrait or all)                                                                                                                                                          
orientation = all                                                                                                                                                                                                                           
                                                                                                                                                                                                                                            
# (list) List of service to declare                                                                                                                                                                                                         
#services = NAME:ENTRYPOINT_TO_PY,NAME2:ENTRYPOINT2_TO_PY                                                                                                                                                                                   
                                                                                                                                                                                                                                            
#                                                                                                                                                                                                                                           
# OSX Specific                                                                                                                                                                                                                              
#                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                            
#                                                                                                                                                                                                                                           
# author = © Copyright Info                                                                                                                                                                                                                 
                                                                                                                                                                                                                                            
# change the major version of python used by the app                                                                                                                                                                                        
osx.python_version = 3

# Kivy version to use
osx.kivy_version = 1.9.1

#
# Android specific
#

# (bool) Indicate if the application should be fullscreen or not
fullscreen = 0

# (string) Presplash background color (for new android toolchain)
# Supported formats are: #RRGGBB #AARRGGBB or one of the following names:
# red, blue, green, black, white, gray, cyan, magenta, yellow, lightgray,
# darkgray, grey, lightgrey, darkgrey, aqua, fuchsia, lime, maroon, navy,
# olive, purple, silver, teal.
#android.presplash_color = #FFFFFF

# (list) Permissions
android.permissions = INTERNET

# (int) Target Android API, should be as high as possible.
#android.api = 27

# (int) Minimum API your APK will support.
#android.minapi = 21

# (int) Android SDK version to use
#android.sdk = 20

# (str) Android NDK version to use
#android.ndk = 17c

# (int) Android NDK API to use. This is the minimum API your app will support, it should usually match android.minapi.
#android.ndk_api = 21

# (bool) Use --private data storage (True) or --dir public storage (False)
#android.private_storage = True

# (str) Android NDK directory (if empty, it will be automatically downloaded.)
#android.ndk_path =

# (str) Android SDK directory (if empty, it will be automatically downloaded.)
#android.sdk_path =

# (str) ANT directory (if empty, it will be automatically downloaded.)
#android.ant_path =

# (bool) If True, then skip trying to update the Android sdk
# This can be useful to avoid excess Internet downloads or save time
# when an update is due and you just want to test/build your package
# android.skip_update = False

# (bool) If True, then automatically accept SDK license
# agreements. This is intended for automation only. If set to False,
# the default, you will be shown the license when first running
# buildozer.
# android.accept_sdk_license = False

# (str) Android entry point, default is ok for Kivy-based app
#android.entrypoint = org.renpy.android.PythonActivity

# (list) Pattern to whitelist for the whole project
#android.whitelist =

# (str) Path to a custom whitelist file
#android.whitelist_src =

# (str) Path to a custom blacklist file
#android.blacklist_src =

# (list) List of Java .jar files to add to the libs so that pyjnius can access
# their classes. Don't add jars that you do not need, since extra jars can slow
# down the build process. Allows wildcards matching, for example:
# OUYA-ODK/libs/*.jar
#android.add_jars = foo.jar,bar.jar,path/to/more/*.jar

# (list) List of Java files to add to the android project (can be java or a
# directory containing the files)
#android.add_src =

# (list) Android AAR archives to add (currently works only with sdl2_gradle
# bootstrap)
#android.add_aars =

# (list) Gradle dependencies to add (currently works only with sdl2_gradle
# bootstrap)
#android.gradle_dependencies =

# (list) Java classes to add as activities to the manifest.
#android.add_activites = com.example.ExampleActivity

# (str) OUYA Console category. Should be one of GAME or APP
# If you leave this blank, OUYA support will not be enabled
#android.ouya.category = GAME

# (str) Filename of OUYA Console icon. It must be a 732x412 png image.
#android.ouya.icon.filename = %(source.dir)s/data/ouya_icon.png

# (str) XML file to include as an intent filters in <activity> tag
#android.manifest.intent_filters =

# (str) launchMode to set for the main activity
#android.manifest.launch_mode = standard

# (list) Android additional libraries to copy into libs/armeabi
#android.add_libs_armeabi = libs/android/*.so
#android.add_libs_armeabi_v7a = libs/android-v7/*.so
#android.add_libs_arm64_v8a = libs/android-v8/*.so
#android.add_libs_x86 = libs/android-x86/*.so
#android.add_libs_mips = libs/android-mips/*.so

# (bool) Indicate whether the screen should stay on
# Don't forget to add the WAKE_LOCK permission if you set this to True
#android.wakelock = False

# (list) Android application meta-data to set (key=value format)
#android.meta_data =

# (list) Android library project to add (will be added in the
# project.properties automatically.)
#android.library_references =

# (list) Android shared libraries which will be added to AndroidManifest.xml using <uses-library> tag
#android.uses_library =

# (str) Android logcat filters to use
#android.logcat_filters = *:S python:D

# (bool) Copy library instead of making a libpymodules.so
#android.copy_libs = 1

# (str) The Android arch to build for, choices: armeabi-v7a, arm64-v8a, x86, x86_64
android.arch = armeabi-v7a

#
# Python for android (p4a) specific
#

# (str) python-for-android fork to use, defaults to upstream (kivy)
#p4a.fork = kivy

# (str) python-for-android branch to use, defaults to master
#p4a.branch = master

# (str) python-for-android git clone directory (if empty, it will be automatically cloned from github)
#p4a.source_dir =

# (str) The directory in which python-for-android should look for your own build recipes (if any)
#p4a.local_recipes = recipes

# (str) Filename to the hook for p4a
#p4a.hook =

# (str) Bootstrap to use for android builds
# p4a.bootstrap = sdl2

# (int) port number to specify an explicit --port= p4a argument (eg for bootstrap flask)
#p4a.port =


#
# iOS specific
#

# (str) Path to a custom kivy-ios folder
#ios.kivy_ios_dir = ../kivy-ios
# Alternately, specify the URL and branch of a git checkout:
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master

# Another platform dependency: ios-deploy
# Uncomment to use a custom checkout
#ios.ios_deploy_dir = ../ios_deploy
# Or specify URL and branch
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.7.0

# (str) Name of the certificate to use for signing the debug version
# Get a list of available identities: buildozer ios list_identities
#ios.codesign.debug = "iPhone Developer: <lastname> <firstname> (<hexstring>)"

# (str) Name of the certificate to use for signing the release version
#ios.codesign.release = %(ios.codesign.debug)s


[buildozer]

# (int) Log level (0 = error only, 1 = info, 2 = debug (with command output))
log_level = 2

# (int) Display warning if buildozer is run as root (0 = False, 1 = True)
warn_on_root = 1

# (str) Path to build artifact storage, absolute or relative to spec file
# build_dir = ./.buildozer

# (str) Path to build output (i.e. .apk, .ipa) storage
# bin_dir = ./bin

#    -----------------------------------------------------------------------------
#    List as sections
#
#    You can define all the "list" as [section:key].
#    Each line will be considered as a option to the list.
#    Let's take [app] / source.exclude_patterns.
#    Instead of doing:
#
#[app]
#source.exclude_patterns = license,data/audio/*.wav,data/images/original/*
#
#    This can be translated into:
#
#[app:source.exclude_patterns]
#license
#data/audio/*.wav
#data/images/original/*
#


#    -----------------------------------------------------------------------------
#    Profiles
#
#    You can extend section / key with a profile
#    For example, you want to deploy a demo version of your application without
#    HD content. You could first change the title to add "(demo)" in the name
#    and extend the excluded directories to remove the HD content.
#
#[app@demo]
#title = My Application (demo)
#
#[app:source.exclude_patterns@demo]
#images/hd/*
#
#    Then, invoke the command line with the "demo" profile:
#
#buildozer --profile demo android debug

Logs

Related build logs (note the lld hacky stuff, despite I have installed manually apt install llvm):

[INFO]:    Building libffi for armeabi-v7a
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/libffi/armeabi-v7a__ndk_target_21/libffi
[INFO]:    -> running autogen.sh
[INFO]:    -> running autoreconf -vif                                                                                                                                                                                                      
[INFO]:    -> running configure --host=arm-linux-androideabi --prefix=/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/libffi/armeabi-v7a__ndk_target_21/libffi --disable-bui...(and 21 more)           
[INFO]:    -> running make -j 8 libffi.la                                                                                                                                                                                                  
[INFO]:    -> running cp /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/libffi/armeabi-v7a__ndk_target_21/libffi/.libs/libffi.so /home/user/hostcwd/.buildozer/android/plat...(and 65 more)           
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Building librt for armeabi-v7a
[INFO]:    -> running ln -sf /home/user/.buildozer/android/platform/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib/libc.so /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_...(and 79 more)
[INFO]:    -> running ln -sf /home/user/.buildozer/android/platform/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib/libc.a /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_b...(and 77 more)
[INFO]:    Building openssl for armeabi-v7a
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/openssl/armeabi-v7a__ndk_target_21/openssl1.1
[INFO]:    -> running perl Configure shared no-dso no-asm android-arm -D__ANDROID_API__=21
[INFO]:    Applying patch disable-sover.patch                                                                                                                                                                                              
[INFO]:    -> running patch -t -d /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/openssl/armeabi-v7a__ndk_target_21/openssl1.1 -p1 -i /home/user/hostcwd/.buildozer/android...(and 81 more)
[INFO]:    -> running make build_libs                                                                                                                                                                                                      
[INFO]:    -> running cp libssl1.1.so libcrypto1.1.so /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/libs_collections/myapp/armeabi-v7a                                                                          
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Building sdl2_image for armeabi-v7a
[INFO]:    Building sdl2_mixer for armeabi-v7a
[INFO]:    Building sdl2_ttf for armeabi-v7a
[INFO]:    Building sqlite3 for armeabi-v7a
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/sqlite3/armeabi-v7a__ndk_target_21/sqlite3
[INFO]:    -> running ndk-build V=1 APP_PLATFORM=android-21 APP_ABI=armeabi-v7a
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android                                                                                                                                          
[INFO]:    Building python3 for armeabi-v7a
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3-libffi-openssl-sqlite3/armeabi-v7a__ndk_target_21/python3/android-build
[WARNING]: Doing some hacky stuff to link properly
[INFO]:    -> running cp /home/user/.buildozer/android/platform/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib/crtbegin_so.o ./
[INFO]:    -> running cp /home/user/.buildozer/android/platform/android-ndk-r17c/platforms/android-21/arch-arm/usr/lib/crtend_so.o ./
[WARNING]: lld not found, linking without it. Consider installing lld if linker errors occur.
[INFO]:    Activating flags for sqlite3
[INFO]:    Activating flags for libffi
[INFO]:    Activating flags for openssl
[INFO]:    -> running configure --host=arm-linux-androideabi --build=x86_64-pc-linux-gnu --enable-shared --enable-ipv6 ac_cv_file__dev_ptmx=yes ac_cv_file__dev_ptc=no --without-ensurepip ac_cv_little_endian_d...(and 199 more)
[INFO]:    -> running make all -j 8 INSTSONAME=libpython3.7m.so                                                                                                                                                                            
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android                                                                                                                                          

[...]

[INFO]:    Building cffi for armeabi-v7a
[INFO]:    cffi apparently isn't already in site-packages
[INFO]:    Building compiled components in cffi
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/cffi-python3/armeabi-v7a__ndk_target_21/cffi
[INFO]:    -> running python setup.py clean --all
[INFO]:    -> running python setup.py build_ext -v                                                                                                                                                                                         
[INFO]:    -> running find build/lib.linux-x86_64-3.7 -name "*.o" -exec arm-linux-androideabi-strip --strip-unneeded {} ;                                                                                                                  
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Installing cffi into site-packages
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/cffi-python3/armeabi-v7a__ndk_target_21/cffi
[INFO]:    -> running python setup.py install -O2 --root=/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp --install-lib=.
[INFO]:    Rebuilding compiled components in cffi                                                                                                                                                                                          
[INFO]:    -> running python setup.py clean --all
[INFO]:    -> running python setup.py build_ext -v                                                                                                                                                                                         
[INFO]:    -> running python setup.py install -O2 --root=/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/hostpython3/desktop/hostpython3/native-build --install-lib=Lib/site-packages                  
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android                                                                                                                                          
[INFO]:    Building gevent for armeabi-v7a
[INFO]:    gevent apparently isn't already in site-packages
[INFO]:    Cythonizing anything necessary in gevent
[INFO]:    Moved "-DANDROID -D__ANDROID_API__=21 -I/home/user/.buildozer/android/platform/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi -I/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/include/python3.7 -I/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3-libffi-openssl-sqlite3/armeabi-v7a__ndk_target_21/python3/Include" from CFLAGS to CPPFLAGS.
[INFO]:    Moved "-lm -lpython3.7m" from LDFLAGS to LIBS.
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/gevent-python3/armeabi-v7a__ndk_target_21/gevent
[INFO]:    -> running python -c import sys; print(sys.path)
[INFO]:    Trying first build of gevent to get cython files: this is expected to fail                                                                                                                                                      
[INFO]:    -> running python setup.py build_ext -v
[INFO]:    First build appeared to complete correctly, skipping manualcythonising.                                                                                                                                                         
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/gevent-python3/armeabi-v7a__ndk_target_21/gevent
[INFO]:    Stripping object files
[INFO]:    -> running find . -iname *.so -exec /usr/bin/echo {} ;
[INFO]:    -> running find . -iname *.so -exec arm-linux-androideabi-strip --strip-unneeded {} ;                                                                                                                                           
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/gevent-python3/armeabi-v7a__ndk_target_21/gevent
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android
[INFO]:    Moved "-DANDROID -D__ANDROID_API__=21 -I/home/user/.buildozer/android/platform/android-ndk-r17c/sysroot/usr/include/arm-linux-androideabi -I/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/include/python3.7 -I/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3-libffi-openssl-sqlite3/armeabi-v7a__ndk_target_21/python3/Include" from CFLAGS to CPPFLAGS.
[INFO]:    Moved "-lm -lpython3.7m" from LDFLAGS to LIBS.
[INFO]:    Installing gevent into site-packages
[INFO]:    -> directory context /home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/gevent-python3/armeabi-v7a__ndk_target_21/gevent
[INFO]:    -> running python setup.py install -O2 --root=/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp --install-lib=.
[INFO]:    <- directory context /home/user/hostcwd/.buildozer/android/platform/python-for-android                                                                                                                                          

The last logs from ADB are:

12-08 13:15:24.883  2707  7245 I ActivityManager: Start proc 22728:android.process.media/u0a32 for content provider com.android.providers.downloads/.DownloadProvider
12-08 13:15:24.928 22610 22635 I python  : [INFO   ] [Image       ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
12-08 13:15:25.037 22610 22635 I python  : [INFO   ] [Text        ] Provider: sdl2
12-08 13:15:25.039 22639 22724 I Finsky  : [51296] mnb.run(2): Installer: Installer starting.
12-08 13:15:25.039 22639 22724 I Finsky  : [51296] mnb.run(4): Installer: Installer started.
12-08 13:15:25.045 22639 22639 I Finsky  : [2] moa.a(252): Installer: found apps to install. isMultiUserMode=true, apps=[]
12-08 13:15:25.059 22639 22639 I Finsky  : [2] uwr.a(20): Connecting InstallListener to SplitInstallService broadcaster...
12-08 13:15:25.099 22610 22635 I python  :  Traceback (most recent call last):
12-08 13:15:25.100 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/app/main.py", line 53, in <module>
12-08 13:15:25.100 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/app/main.py", line 25, in main
12-08 13:15:25.101 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/app/app/MyApp.py", line 25, in <module>
12-08 13:15:25.101 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/app/app/ServicesManager.py", line 3, in <module>
12-08 13:15:25.102 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/app/app/Service.py", line 6, in <module>
12-08 13:15:25.102 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/app/app/sshdevice.py", line 5, in <module>
12-08 13:15:25.103 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/pssh/clients/__init__.py", line 19, in <module>
12-08 13:15:25.104 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/pssh/clients/native/__init__.py", line 19, in <module>
12-08 13:15:25.104 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/pssh/clients/native/parallel.py", line 20, in <module>
12-08 13:15:25.105 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/gevent/__init__.py", line 87, in <module>
12-08 13:15:25.105 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/gevent/_hub_local.py", line 101, in <module>
12-08 13:15:25.106 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/gevent/_util.py", line 105, in import_c_accel
12-08 13:15:25.107 22610 22635 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3-libffi-openssl-sqlite3/armeabi-v7a__ndk_target_21/python3/Lib/importlib/__init__.py", line 127, in import_module
12-08 13:15:25.108 22610 22635 I python  :  ImportError: dlopen failed: cannot locate symbol "_Py_NoneStruct" referenced by "/data/data/org.test.myapp/files/app/_python_bundle/site-packages/gevent/__hub_local.so"...
12-08 13:15:25.108 22610 22635 I python  : Python for android ended.
@emibcn
Copy link
Author

emibcn commented Dec 8, 2019

I have already found a couple of previous related bugs, but weren't useful for me:

@AndreMiras
Copy link
Member

Yes that definitely feels like libpython wasn't linked 🤔
Could you try to make a minimal reproduction program? Basically it seems to happen by simply importing gevent correct? So the idea would be to make a simple main.py with that and simplify the requirements list as much as possible.
Then I would try different versions of python-for-android with that same program

@emibcn
Copy link
Author

emibcn commented Jan 18, 2020

I did a minimal Kivy app which reproduces the same error with gevent (a little bit more complex than just importing it):

testerror.zip

@onsunsl
Copy link

onsunsl commented Jun 30, 2020

I got the same error with psutil lib.

  File "/home/kivy/test/.buildozer/android/app/schedule/scheduler.py", line 10, in <module>
  File "/home/kivy/test/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/psutil/__init__.py", line 95, in <module>
  File "/home/kivy/test/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/myapp/psutil/_pslinux.py", line 26, in <module>
ImportError: dlopen failed: can't find ARM symbol

dlopen failed: can't find ARM symbol
  • Python 3.8.1
  • kivy 1.11.1
  • builozer 1.2

@elongberg
Copy link

Having a similar issue when trying to use gevent, although in my case it's not locating PyBaseObject_Type, rather than _Py_NoneStruct (same site-packages/gevent/__hub_local.so though). Happens as soon as I try to import gevent.

  • gevent 1.4.0 (latest supported by library's recipe) (although also tried a custom recipe with latest gevent 21.1.2, same error)
  • python-for-android latest (2020.6.2)
  • python 3.8

I'm no expert, but it does seem to be an issue of libpython not being linked like @AndreMiras indicated, although from the logs it does "appear" to be trying to link (see e.g. Moved "-lm -lpython3.7m" from LDFLAGS to LIBS. in the logs above).

Has anyone with more knowledge than I been able to get gevent working, or have ideas of workarounds or what to try next?

@bmolenaar
Copy link

I have the same problem as @elongberg, has anyone managed to solve this? I thought it might be a case of the gevent dependencies not being imported correctly, but even after specifically importing zope.event, setuptools, greenlet and zope.interface the same error is still thrown

@emibcn
Copy link
Author

emibcn commented Jun 13, 2021

Now the error has changed a bit with ImportError: dlopen failed: cannot locate symbol "PyBaseObject_Type" referenced by "/data/data/org.test.kivytesterror/files/app/_python_bundle/site-packages/gevent/__hub_local.so":

06-13 21:51:13.969 24610 24646 I python  :  Traceback (most recent call last):
06-13 21:51:13.969 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/app/main.py", line 9, in <module>
06-13 21:51:13.972 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/kivytesterror/pssh/clients/__init__.py", line 19, in <module>
06-13 21:51:13.973 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/kivytesterror/pssh/clients/native/__init__.py", line 19, in <module>
06-13 21:51:13.973 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/kivytesterror/pssh/clients/native/parallel.py", line 20, in <module>
06-13 21:51:13.974 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/kivytesterror/pssh/clients/native/single.py", line 23, in <module>
06-13 21:51:13.974 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/kivytesterror/gevent/__init__.py", line 87, in <module>
06-13 21:51:13.974 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/kivytesterror/gevent/_hub_local.py", line 101, in <module>
06-13 21:51:13.975 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/python-installs/kivytesterror/gevent/_util.py", line 105, in import_c_accel
06-13 21:51:13.975 24610 24646 I python  :    File "/home/user/hostcwd/.buildozer/android/platform/build-armeabi-v7a/build/other_builds/python3/armeabi-v7a__ndk_target_21/python3/Lib/importlib/__init__.py", line 127, in import_module
06-13 21:51:13.976 24610 24646 I python  :  ImportError: dlopen failed: cannot locate symbol "PyBaseObject_Type" referenced by "/data/data/org.test.kivytesterror/files/app/_python_bundle/site-packages/gevent/__hub_local.so"...
06-13 21:51:13.976 24610 24646 I python  : Python for android ended.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants