【问题标题】:Kivy/Buildozer Import Error - pymssql.so is 64-bit instead of 32-bitKivy/Buildozer 导入错误 - pymssql.so 是 64 位而不是 32 位
【发布时间】:2018-08-13 19:52:28
【问题描述】:

我正在使用 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

【问题讨论】:

  • x86_64 仅与 intel/amd 架构相关,正如您所提到的,您的目标是 armeabi-v7a,所以即使它支持 32 位 intel,这个轮子也没有任何用处,它与 32 位不同位臂(甚至比 x86 与 amd64 不同),它可以帮助以详细模式重建您的 p4a 发行版,并粘贴构建 pymssql 库的构建日志的相关部分,以了解发生了什么。我在github.com/kivy/python-for-android/tree/master/pythonforandroid/… 中没有看到 pymssql 配方,但由于 lib 需要编译,所以你当然需要一个。
  • 如果可以的话,我当然建议您不要让您的应用直接连接到您的 sql 数据库,而是与服务器上的 rest api 对话,该 API 将连接到数据库,通常更容易以这种方式确保安全,因为您只公开应用程序需要的 api。

标签: python python-2.7 kivy buildozer


【解决方案1】:

有两件事需要检查:

  1. 确保您已打包 32 位版本。你说轮子应该支持 64 位和 32 位,但你引用了x86_64 轮子版本。在他们的 pypi 页面上,他们有一个 i686 版本,这是您想要的 32 位版本。

  2. 即使是 32 或 64,也必须是 ARM >= v7a 编译的。除非您的轮子是专门为 android 编译的,否则它很有可能不起作用,因为 libc 在 Linux 和 Android 上是不一样的。所以你会遇到二进制不兼容的问题。

这就是为什么对于这类库,您需要在 python-for-android 中编写一个配方来编译适用于 Android 的库。

【讨论】:

    猜你喜欢
    • 2016-07-13
    • 2017-06-09
    • 1970-01-01
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多