Ошибка импорта 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-разрядную версию?


person darthpaul    schedule 06.03.2018    source источник
comment
x86_64 актуален только для архитектур Intel / amd, вы нацеливаетесь на armeabi-v7a, как вы упомянули, поэтому это колесо не будет иметь никакого смысла, даже если оно поддерживает 32-битный Intel, оно отличается от 32-битного плеча (даже больше, чем x86 отличается от amd64), это может помочь перестроить ваш дистрибутив p4a в подробном режиме и вставить в соответствующий раздел журнала сборки, в котором строится библиотека pymssql, чтобы понять, что происходит. я не вижу рецепта pymssql в github.com/kivy/python- for-android / tree / master / pythonforandroid /, но поскольку библиотека требует компиляции, она вам обязательно понадобится.   -  person Tshirtman    schedule 11.03.2018
comment
Если вы можете, я бы, безусловно, посоветовал не подключать ваше приложение напрямую к вашей базе данных sql, а вместо этого разговаривать с api отдыха на сервере, который будет подключаться к базе данных, обычно проще обеспечить безопасность таким образом, так как вы только выставьте api, который нужен приложению.   -  person Tshirtman    schedule 11.03.2018


Ответы (1)


Есть 2 вещи, которые нужно проверить:

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

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

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

person tito    schedule 29.04.2019