我正在使用 64 位 Kivy/Buildozer VM 构建 Kivy 应用并将其部署到 Android Lollipop(armeabi-v7a 32 位架构)。
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
的预构建 pymssql-2.1.3-cp27-cp27mu-manylinux1_x86_64.whl
轮应该支持 64 位和 32 位拱。
如何获得支持 32 位的 pymssql.so
?
最佳答案
有两件事要检查:
确保您打包了 32 位版本。你说轮子应该支持 64 位和 32 位,但你引用了
x86_64
轮子版本。在他们的 pypi 页面上,他们有一个i686
版本,这是您想要的 32 位版本。即使是 32 位或 64 位,也必须是 ARM >= v7a 编译的。除非你的 wheels 是专门为 android 编译的,否则它很可能无法工作,因为 libc 在 Linux 和 Android 上是不一样的。所以你会遇到二进制不兼容问题。
这就是为什么对于这类库,您需要在 python-for-android 中编写一个配方来为 Android 编译库。
关于python - Kivy/Buildozer 导入错误 - pymssql.so 是 64 位而不是 32 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49122655/