库分为动态库和静态库。
库从本质上来说是一种可执行代码的二进制格式,可以被载入内存中执行。
在Linux系统中:
静态库:这类库的名字一般是libxxx.a;利用静态函数库编译出来的文件会比较大,因为整个函数库的所有数据都被整合进了目标代码中,优点就是编译后的执行程序不需要外部的函数库的支持,因为所有使用的函数都已经被编译进去了。缺点就是如果静态函数库改变的话,程序必须重新编译。
动态库:一般是libxxx.so;动态库在编译的时候没有被编译进目标代码中,只有你的程序执行到相关函数时才会调用函数库里的相应函数,因此动态库所产生的可执行文件的大小比较小。由于函数库没有整合进你的程序,而是程序运行时动态申请并调用,所以程序的运行环境比较提供相应的库。动态函数库的改变,并不影响你的程序,所以动态函数库的升级比较方便。
这里介绍一下各类设备对应的cpu架构
模拟器包含的cpu架构:
iPhone 4s – iPhone 5 : i386
iPhone SE : x86_84
iPhone5s – iPhone 7 Plus : x86_64
真机设备包含的cpu架构
iPhone 3g – iPhone 4s : armv7
iPhone 5 – iPhone 5c : armv7s
iPhone SE : arm64
iPhone 5s – iPhone 7 Plus : arm64
只要支持了armv7就不用再支持armv7s
lipo -info xxxx.a(查看.a支持的库的类型)
Architectures in the fat file: libJDPAuthSDK.a are: armv7 i386 x86_64 arm64
如何检查.a静态库是否支持bitcode:
otool -arch armv7 -l xxxxx.a | grep __bitcode | wc -l
27
输出值不为0
如何检查.framework是否支持bitcode:
网上找到的都不太具体,经反复试验,命令如下:
otool -l 后跟的是.framework的二进制文件路径,但是这个路径一直不知道怎么找到。
在检测以上两种库时,都需要把库放到根目录,也就是我所在账号的目录下,不然会报找不到路径
经历过的错误方式https://www.cnblogs.com/junhuawang/p/7598236.html
https://github.com/Damonvvong/DevNotes/blob/master/Notes/framework.md
https://github.com/Damonvvong/DevNotes/blob/master/Notes/framework2.md
https://blog.csdn.net/buyu03/article/details/86646445
https://blog.csdn.net/skylin19840101/article/details/72415279
检测bitcode脚本
https://stackoverflow.com/questions/32808642/how-to-check-if-a-framework-is-bitcode-supported-for-xcode7
https://stackoverflow.com/questions/34959767/whats-the-difference-between-fembed-bitcode-and-bitcode-generation-mode
网友评论