kivy-ios使用Pillow时Xcode编译出现little CMS相关Undefined symbol错误求助
解决方案
1. 修复Pillow配方版本与依赖
找到kivy-ios项目目录下的recipes/pillow/__init__.py文件,做两处修改:
- 将版本号从6.1.0修改为6.2.1及以上的兼容版本(建议使用7.1.2,适配Python3.8稳定性更高),同步更新对应版本的源码sha256校验值
- 在配方的
depends字段中添加lcms2、libtiff、webp,确保构建Pillow前先编译对应iOS平台的依赖库
如果你的项目没有用到色彩空间转换、ICC profile相关功能,也可以直接在Pillow的构建参数中添加--disable-lcms,完全禁用little CMS依赖,从根源避免符号缺失问题,你当前项目仅用到基础图像创建、绘制、模糊功能,禁用lcms2无任何影响。
2. 清理旧构建缓存
执行以下命令清理之前错误构建的Pillow缓存:
toolchain clean pillow rm -rf ./dist/build/*pillow*
之前用toolchain pip安装无效是因为pip只能安装纯Python包,lcms2、Pillow这类包含C扩展的库必须通过toolchain build走交叉编译配方才能生成iOS可用的二进制文件,本地brew安装的是Mac平台的依赖库,无法在iOS项目中链接使用
3. 重新构建相关组件
执行命令一次性构建所有依赖与Pillow:
toolchain build lcms2 libtiff webp pillow
kivy-ios已内置lcms2等库的交叉编译配方,无需手动下载源码配置,会自动编译为适配iOS多架构的静态库。
4. Xcode项目补充链接库
构建完成后打开你的Xcode项目,进入构建阶段的「Link Binaries with Libraries」列表,点击添加按钮,从kivy-ios项目的./dist/lib目录中选择以下静态库导入:
- liblcms2.a
- libtiff.a
- libwebp.a
- libwebpdemux.a
- libwebpmux.a
重新构建Xcode项目即可解决未定义符号错误。
内容的提问来源于stack exchange,提问作者Taka
相关产品推荐
相关产品推荐

