当前位置: 首页 > news >正文

iOS .a类型静态库使用终端进行拆解和合并生成

  项目中会用到许多第三方的.a类型的静态库,有时候会有一些静态库回包含相同文件而产生冲突,我们就需要对这个库进行去重的一个操作。一般有哪些文件冲突了,xcode报错都会有详细的提示。我们可以将这两个库合并,也可以其中一方中的文件删除。我们已拆分一个test.a为例,作一个简单的总结:
        一、删除重复文件
        第一步:首先要确定你所操作的静态库支持的框架

lipo -info test.a 

        第二步:将静态库按照支持的框架拆分

以拆分armv7 框架为例
lipo -extract_family armv7 -output test_armv7.a  test.a 
这时候去文件夹下查看出现一个test_armv7.a的静态库就说明是成功了
这时候一定要记得确定(lipo -info test_armv7.a )一下你拆分出来的版本是否是你想要的这个框架下的

        第三步:删除重复的文件,记得是删除你分离出来的单框架库中的文件

ar -d test_armv7.a test1.o

        第四步:将静态库支持的框架都进行第二步和第三步操作。
        第五步:将操作完成的库合并成新的库

lipo -create -output test_new.a  test_armv7.a test_arm64.a

  二、合并静态库

         合并静态库和删除重复文件都需要确定支持框架和按照支持的框架拆分,就不在赘述了。
        第三步:将分解库中的文件拆分出来

 ar -x test_armv7.a
这时候你的文件夹中会出现你库中包含的.o文件

        第四步:将你需要合并的另一个库进行相同操作,将文件分解到相同文件夹中,相同的文件回自动的保留一份。

注意: 1、我是在相同的文件中操作的,所以最后分解完成记得将 test.a等源库删除。2、不同的框架下的文件记得分解到不同的文件夹中。

        第五步:生成不同框架下的静态库

ibtool -static -o test_new_armv7.a *.o

        第六步:合成新的静态库

lipo -create -output test_new.a  test_new_armv7.a test_new_arm64.a



 

指令合集   直接copy可用的

lipo -info SpeexKit.aarm64 arm64e armv7 armv7s lipo -extract_family arm64 -output SpeexKitv64.a  SpeexKit.alipo -info SpeexKitv64.alipo SpeexKitv64.a   -thin arm64 -output  SpeexKitv64.aar -d SpeexKitv64.a SpeexUnit.o———————>
lipo -extract_family arm64e -output SpeexKitv64e.a  SpeexKit.alipo -info SpeexKitv64e.alipo SpeexKitv64e.a   -thin arm64e -output  SpeexKitv64e.aar -d SpeexKitv64e.a SpeexUnit.o——————>lipo -extract_family armv7 -output SpeexKitv7.a  SpeexKit.alipo -info SpeexKitv7.alipo SpeexKitv7.a   -thin armv7 -output  SpeexKitv7.aar -d SpeexKitv7.a SpeexUnit.o———————>lipo -extract_family armv7s -output SpeexKitv7s.a  SpeexKit.alipo -info SpeexKitv7s.alipo SpeexKitv7s.a   -thin armv7s -output  SpeexKitv7s.aar -d SpeexKitv7s.a SpeexUnit.o———————>lipo -create -output SpeexKit.a  SpeexKitv64.a  SpeexKitv64e.a  SpeexKitv7.a  SpeexKitv7s.a

http://www.lryc.cn/news/208259.html

相关文章:

  • react-组件间的通讯
  • 【广州华锐互动】VR公司工厂消防逃生演练带来沉浸式的互动体验
  • 可观察性支柱:探索日志、指标和跟踪
  • nginx浏览器缓存和上流缓存expires指令_nginx配置HTTPS
  • 硬件安全与机器学习的结合
  • 腾讯云国际-如何使用对象存储COS在 CKafka 控制台创建数据异步拉取任务?腾讯云代充
  • 内存马概念
  • 交换机基础(四):MSTP负载均衡配置案例
  • C# OpenCvSharp Yolov8 Face Landmarks 人脸特征检测
  • 计算机网络之数据链路层(全)
  • 前端TypeScript学习-交叉类型与泛型
  • 科聪协作(复合)移动机器人整体解决方案
  • RTE(Runtime Environment)
  • 搭建自己的搜索引擎——oh-my-search使用
  • 微信小程序实现文章内容详情
  • 行情分析——加密货币市场大盘走势(10.27)
  • 设计模式:桥接模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
  • error: the following arguments are required: --model, --data 解决方法
  • Kafka - 消息队列的两种模式
  • 【Go】格式化字符串指令大全 Redis常用命令
  • Windows 和 Linux 这2个系统在进行编程实现的时候的一些区别:
  • [SQL开发笔记]SQL 别名:为表名称或列名称指定别名
  • 风险管理案例题
  • NFC读卡器ST25R3911B-AQWT、ST25R3917B-AQET、ST25R3919B-AQET产品描述、功能框图
  • JVM进阶(2)
  • 2023大湾区杯粤港澳金融数学建模竞赛思路+模型+代码
  • 【Note详细图解】中缀表达式如何转为后缀表达式?数据结构
  • 常用到的资源共享网站
  • 关于JAVA中字节码文件版本号、产品版本号及开发版本号的关系
  • ModbusTCP 转 Profinet 主站网关在博图配置案例