You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

kivy-ios在Xcode构建失败:符号重复与Pillow模块错误

解决Kivy iOS构建中的重复符号与Pillow导入循环问题

问题1:libfreetype.a与libsdl2_ttf.a的arm64重复符号错误

这是因为sdl2_ttf默认内置编译freetype,而pillow也依赖独立构建的libfreetype.a,导致符号重复。解决步骤:

  1. 找到kivy-ios toolchain中sdl2_ttf的recipe文件,路径通常为kivy-ios/recipes/sdl2_ttf/__init__.py
  2. 修改其build方法中的configure命令,添加--disable-freetype参数,强制sdl2_ttf使用外部已构建的freetype库:
    def build(self):
        env = self.get_env()
        self.run('./configure', '--prefix={}'.format(self.ctx.dist_dir),
                 '--host={}'.format(self.ctx.host),
                 '--disable-freetype',  # 新增这一行
                 env=env)
        self.run('make install', env=env)
    
  3. 清理旧构建缓存:
    toolchain clean sdl2_ttf freetype pillow
    
  4. 重新构建依赖:
    toolchain build python3 kivy pillow
    

问题2:Pillow _imaging模块导入错误(PyInit__imaging未定义)

这是因为toolchain pip install kivymd会自动安装依赖,可能覆盖或重新安装了未适配iOS的Pillow版本。解决步骤:

  1. 确保已通过toolchain完成python3、kivy、pillow的构建(按上面的方法解决重复符号问题后)
  2. 安装kivymd时跳过依赖安装,避免pip重新拉取Pillow:
    toolchain pip install kivymd --no-deps
    
  3. 检查Xcode项目配置:确认libpillow.a已添加到项目的Link Binary With Libraries中,且顺序在kivymd相关模块之前

额外排查建议

  • 完全清理构建缓存后从头构建,避免残留旧文件:toolchain clean all
  • 回退到之前成功构建时的kivy-ios版本(用户之前构建成功,新增页面未加新库,大概率是toolchain版本更新引入的兼容性问题)
  • 检查Xcode的Other Linker Flags,可尝试添加-Wl,-allow-multiple-definition临时绕过重复符号(仅作为临时方案,优先用前面的recipe修改方法)

内容的提问来源于stack exchange,提问作者cryptotheo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 18:50:25