Xcode中导入.a静态库后报错添加-force_load或-all_load
Posted nocrash
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Xcode中导入.a静态库后报错添加-force_load或-all_load相关的知识,希望对你有一定的参考价值。
第一种方法:
以前在做项目的时候在Xcode中倒入一个三方SDK的时候,会有一些.a的静态库,这时候如果直接编译运行就会报错。当时只知道往build settings的linker flags 里面添加-force_load和.a文件的路径。最近又多次用到,这里总结一下。
例如在Xcode中倒入一个SIPSKDK,如下,这里面包含了一个.a的静态库。
这里报错的原因主要是Xcode找不到里面.a文件中的类,所以需要在build settings的linker flags 中添加-ObjC来告诉链接器,把库中的类和category都加载进来,这样编译后app会变大,因为加载了其它的OC代码进来。
而且如果.a静态库中只有分类没有类的话这样也不行。这时候就要在添加了-ObjC的基础上再添加一行-all_load.
-all_load是专门处理-ObjC的一个bug的,用了-ObjC后,如果类库中只有category,没有类的话,这样category还是加载不进来。这时候再加入-all_load就是告诉链接器强制把所有的目标文件都加载进来。但是这样在导入多个.a文件的时候如果都这样做,可能会导致你的目标程序大小增大,而且往往容易引起一些冲突,而这些冲突往往你无法解决(常常出现在你链接的各种库中)。
这时候可以使用-force_load只加载你方法所需要的库,但是使用它需要再添加.a文件的路径。不需再添加-ObjC
所以比较好的解决办法就是在build settings的linker
flags中添加两个:
第二种方法:
在集成第三方框架的时候 ,报了"_BIO_ctrl", referenced from:等一系列错误
-
没有将两个.a文件拖入工程。
-
找到ios DEMO,将上图红框框住的两个.a文件导入工程即可。
以上是关于Xcode中导入.a静态库后报错添加-force_load或-all_load的主要内容,如果未能解决你的问题,请参考以下文章
误删Images.xcassets后报错,objective-c和xcode6.4
Xcode里-ObjC, -all_load, -force_load
如何在 xcode 的 Playground 中导入 RxSwift?