ObjC
Objc指令会告诉链接器把库中的Objective-C类和Category全部加载进来,但这个指令会加载很多不必要的文件而导致可执行文件变大,如果静态库中有类和category的话需要加入这个flag才能正确编译,但是当静态库中只有分类而没有类的时候,就需要使用-all_load或者-force_load了。
-all_load
-all_load指令会强制链接器把目标文件都加载进来,即使没有objc代码。但是如果使用了不止一个静态库文件,并且不同的库文件里面有相同的目标文件,那么使用这个指令会导致duplicate symbol
错误。有两种方法解决 1:用命令行拆包删除重复的目标文件; 2:使用-force_load。
-force_load
这个flag所做的事情跟-all_load其实是一样的,只是-force_load需要指定要进行全部加载的库文件的路径,这样只加载了一个库文件,不影响其余库文件的按需加载。
lipo -info XXX
Architectures in the fat file: XXX are: armv7 i386 x86\_64 arm64
lipo XXX -thin armv7 -output XXX\_armv7
lipo XXX -thin i386 -output XXX\_i386
lipo XXX -thin x86\_64 -output XXX\_x86\_64
lipo XXX -thin arm64 -output XXX\_arm64
ar -x XXX\_armv7
rm md5.o
libtool -static -o ../XXX\_armv7 \*.o
lipo -create -output XXX XXX\_armv7 XXX\_arm64 XXXt\_x86\_64 XXX\_i386
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。