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

如何为iOS编译libarchive?遇lzma.h缺失问题求助

解决iOS中使用libarchive时lzma.h缺失的问题

方案1:重新编译libarchive时禁用LZMA支持

如果不需要LZMA压缩/解压功能,直接在编译阶段关掉该依赖最省心:

  • 回到libarchive源码目录,重新执行configure命令时加上--without-lzma参数,示例:
    ./configure --host=arm64-apple-ios --prefix=/your/output/path --without-lzma
    
    (注意替换--host为对应iOS架构,x86_64架构用x86_64-apple-ios,同时要指定iOS SDK路径,确保是交叉编译iOS版本,不是Mac本地架构)
  • 重新编译安装,得到的libarchive就不会依赖LZMA,自然不会再找lzma.h。

方案2:补充LZMA头文件

如果必须用到LZMA功能,需要手动添加头文件:

  • 从xz-utils源码的src/liblzma/api目录下提取lzma.h及相关头文件
  • 把这些文件复制到iOS项目中,比如新建lzma_headers文件夹存放
  • 在Xcode项目设置的Build Settings→Header Search Paths里,添加这个文件夹的路径(有子目录的话勾选recursive)
  • 保留之前添加的liblzma.tbd,链接阶段就能调用系统的LZMA库了。

方案3:用现成的iOS适配版libarchive

不用自己折腾编译,直接通过CocoaPods安装维护好的版本:

  • 在Podfile中添加:
    pod 'libarchive'
    
  • 执行pod install,这个Pod已经适配了iOS各架构,依赖问题自动处理。

额外提醒

你之前在Mac上编译的arm64/x86_64是Mac本地架构,直接放到iOS项目里会有兼容性问题。如果坚持自行编译,一定要用iOS SDK做交叉编译,比如指定SDKROOT=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk这类参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:36:03