IOS 查看.framework以及.a的库文件支持的架构

IOS 查看.framework以及.a的库文件支持的架构,第1张

.framework:

1.进入到framework目录下

cd /Users/.../xxx.framework

2.输入命令

lipo -info xxx

3.结果

Architectures in the fat file: xsdkFramework are: armv7 arm64 不支持模拟器

.a:

lipo -info /Users/.../xxx.a

Architectures in the fat file: /Users/.../lib/xxx.a are: armv7 armv7s i386 x86_64 arm64

编译出i386、armv7s、armv7(改一下armv7s变成armv7,a9变成a8即可)

这样就可以生成三个.a文件,分别把他们重命名成带7和7s、i386文件名,比如libavcodec7.a、libavcodec7s.a、libavcodec7i386.a

摘要:之前在做项目时,遇到了两个静态库中存在base64.o文件冲突(支付宝SDK与QQ分享SDK),在网上查找了各种资料,最后决定把其中一个.a文件的base64.o文件拆分出去,再重新打包静态库,但最后没能成功,附上静态库一些终端 *** 作:1.查看文件的架构有哪些$lipo-infoAlipayRsaLib.aArchitecturesinthefatfile:libzbar.aare:armv7(cputype(12)cpusubtype(11))i386可以看到静态库中bao'

之前在做项目时,遇到了两个静态库中存在base64.o文件冲突(支付宝SDK与QQ分享SDK),在网上查找了各种资料,最后决定把其中一个.a文件的base64.o文件拆分出去,再重新打包静态库,但最后没能成功,附上静态库一些终端 *** 作:

1.查看文件的架构有哪些

可以看到静态库中bao'h包含了三种cpu架构的.a文件 armv7 armv7s即(cputype (12) cpusubtype (11)) i386(模拟器)

2.将armv7解压出来(armv7替换成i386即可解压i386格式.a)

3.新建立一个文件夹出来存放解压的(.o)文件

4.将静态库中的文件解压

在完成上述步骤后,我们要把其中的base64.o文件移除,再把其余的.o文件重新打包成对应cup框架的.a文件

5.合并完后进行打包.o文件了

6.合并静态库

本来以为这样就可以解决冲突问题,后来打包时才发现armv7s (cputype (12) cpusubtype (11))架构的.a文件无法拆分出来,上面打包的静态库不包含armv7s格式,在iphone5后面版本的真机上部分功能将失效,既然这个方法行不通,那就只能另想其它方案了。于是继续在网上查找资料,最后了解到网上的对Build Settings——Other Linker Flags配置解释:

all_load就是会加载静态库文件中的所有成员,-ObjC就是会加载静态库文件中实现一个类或者分类的所有成员,-force_load(包的路径)就是会加载指定路径的静态库文件中的所有成员。所以对于使用runtime时候的反射调用的方法应该使用这三个中的一个进行link,以保证所有的类都可以加载到内存中供程序动态调用

在拿不到静态库源码情况下 ,只能采用-force_load+库文件路径方法设置Other Linker Flags,逐个加静态库,最终完美解决,发现那个静态库无法调用,就采用以下语句添加进去。

(-force_load后面为静态库文件路径,根据自己项目对应路径)

原文地址: iOS 两个静态库存在同名文件冲突解决方案

在第5步打包.o文件,不太明确,添加一下个人注释。libNew为解压.a文件后存放.o文件的文件夹,libNew.a为新生成的.a文件。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11592981.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存