Ошибка импорта Kivy/Buildozer - pymssql.so - это 64-разрядная версия вместо 32-разрядной

Я использую 64-разрядную виртуальную машину Kivy/Buildozer для создания и развертывания приложения Kivy для Android Lollipop (32-разрядная арка armeabi-v7a).

Сборка Buildozer успешна, но при выполнении приложения и импортировании пакета pymssql (используется для подключения к удаленному серверу MS SQL) я получаю следующую ошибку:

I/python  ( 5335):    File "/build/phytogp/android/app/main.py", line 4, in <module>
I/python  ( 5335):    File "/build/phytogp/android/app/views/apps/phyto_app.py", line 45, in <module>
I/python  ( 5335):    File "/build/phytogp/android/app/services/twilio_service.py", line 2, in <module>
I/python  ( 5335):  ImportError: dlopen failed: "/data/data/com.phyto.phytogp/files/app/lib/python2.7/site-packages/pymssql.so" is 64-bit instead of 32-bit

Как я понимаю, предварительно построенное колесо pymssql-2.1.3-cp27-cp27mu-manylinux1_x86_64.whl для pymssql должно поддерживать как 64, так и 32-разрядную арку.

Как я могу получить pymssql.so, поддерживающий 32-разрядный?

Ответ 1

Есть две вещи для проверки:

  1. убедитесь, что у вас есть упакованная 32-битная версия. Вы сказали, что колесо должно поддерживать 64 и 32 бита, но вы ссылались на версию колеса x86_64. На их странице Pypi у них есть версия i686, то есть ваша 32-битная версия, которую вы хотите.

  2. даже если он 32 или 64, он должен быть скомпилирован ARM> = v7a. Если ваши колеса не были скомпилированы специально для Android, есть большой шанс, что он просто не будет работать, потому что libc не одинаков для Linux и Android. Таким образом, вы столкнетесь с бинарной несовместимостью.

Вот почему для такого рода библиотек вам нужно написать рецепт на python-for-android, чтобы скомпилировать библиотеку для Android.