kivy/python-for-android

rust recipe shazamio-core, builds fine, but cannot locate symbol __gxx_personality_v0

magowiz opened this issue · 7 comments

Checklist

  • the issue is indeed a bug and not a support request
  • issue doesn't already exist: https://github.com/kivy/python-for-android/issues
  • I have a short, runnable example that reproduces the issue
  • I reproduced the problem with the latest development version (p4a.branch = develop)
  • I used the grave accent (aka backticks) to format code or logs when appropriated

Versions

  • Python: 3.10
  • OS: Ubuntu 22.04
  • Kivy: 2.3.1
  • Cython: 0.29.33
  • OpenJDK: 17

Description

I was trying to add to my project a shazamio-core recipe which is a rust project, so I used the recipe class RustCompiledComponentsRecipe and wrote my own recipe, which is this:

from pythonforandroid.recipe import RustCompiledComponentsRecipe


class ShazamIoCoreRecipe(RustCompiledComponentsRecipe):
    version = "1.0.7"
    url = (
        f"https://github.com/shazamio/shazamio-core/archive/refs/tags/{version}.tar.gz"
    )
    site_packages = "shazamio_core"


recipe = ShazamIoCoreRecipe()

It compiles fine, but in android, when I launch my app I get this import error:

ImportError: dlopen failed: cannot locate symbol "__gxx_personality_v0" referenced by "/data/data/net.magowiz.musenote/files/app/_python_bundle/site-packages/shazamio_core/shazamio_core.so"...

then the app crashes

buildozer.spec

Command:

buildozer android debug

Spec file:

title = MuseNote
package.name = musenote
package.domain = net.magowiz
source.dir = .
source.include_exts = py,png,jpg,kv,atlas
source.exclude_dirs = tests, bin, venv, source
version = 0.1
requirements = python3,kivy,kivymd,androidstorage4kivy,bawx-player,mutagen,ffpyplayer==v4.5.1,ffpyplayer_codecs,ffmpeg,
    sqlalchemy,alembic,typing_extensions,mako,markupsafe,pydantic,dataclass_factory,aiohttp_retry,aiohttp,multidict,
    attrs,yarl,async_timeout,charset_normalizer==2.1.1,faust-cchardet,aiosignal,frozenlist,pydub,shazamio_core,annotated_types,
    https://github.com/andreyzin/ShazamIO/archive/refs/heads/bump-pydantic2.zip,pydantic-core
presplash.filename = %(source.dir)s/img/icon.png
icon.filename = %(source.dir)s/img/icon.png
orientation = portrait, landscape
osx.python_version = 3
osx.kivy_version = 1.9.1
fullscreen = 0
android.permissions = STORAGE, WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE, INTERNET,MANAGE_EXTERNAL_STORAGE,READ_MEDIA_IMAGES,READ_MEDIA_VIDEO,READ_MEDIA_AUDIO
android.api = 34
android.archs = arm64-v8a, armeabi-v7a, x86, x86_64
android.allow_backup = True
p4a.fork = kivy
p4a.branch = develop
p4a.local_recipes = p4a_recipes
ios.kivy_ios_url = https://github.com/kivy/kivy-ios
ios.kivy_ios_branch = master
ios.ios_deploy_url = https://github.com/phonegap/ios-deploy
ios.ios_deploy_branch = 1.10.0
ios.codesign.allowed = false
[buildozer]
log_level = 2
warn_on_root = 0

Logs

no errors on building

Maybe you try to play with linking flags in get_recipe_env and add -lstdc++.

Something like:

    def get_recipe_env(self, arch, **kwargs):
        env = super().get_recipe_env(arch, **kwargs)
        env['LDFLAGS'] += ' -lstdc++'
        return env

Hi @T-Dynamos,
thanks for the hint, I changed the recipe in this way, like you suggested:

from pythonforandroid.recipe import RustCompiledComponentsRecipe


class ShazamIoCoreRecipe(RustCompiledComponentsRecipe):
    version = "1.0.7"
    url = (
        f"https://github.com/shazamio/shazamio-core/archive/refs/tags/{version}.tar.gz"
    )
    site_packages = "shazamio_core"

    def get_recipe_env(self, arch, **kwargs):
        env = super().get_recipe_env(arch, **kwargs)
        env['LDFLAGS'] += ' -lstdc++'
        return env


recipe = ShazamIoCoreRecipe()

I deleted buildozer home and build folders and built again, with new recipe, it builds successfully, but I still get same behavior: app crashes and on log there is same error.

Hi,
mantainer provided in a release in github some whl files https://github.com/shazamio/shazamio-core/releases , for example this: https://github.com/shazamio/shazamio-core/releases/download/1.0.7/shazamio_core-1.0.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

How can I create a recipe that install from there ?

@magowiz This can't be used, as it's compiled for glibc, but android is bionic.

(Only wheels compiled with android-ndk will work)

I believe this error can be easily solved, I will try work on it ASAP.

thank you very much!

I believe this error can be easily solved, I will try work on it ASAP.

Hi, is there news about it?