如何为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
相关产品推荐
相关产品推荐

