iOS other linker flags

我是写swift项目的,引入了腾讯云视频的SDK,录制视频,播放视频都正常,可是一点击上传视频,app就crash掉了。c++

当时项目是在Xcode7下运行,报的错就一句话:swift

 libc++abi.dylib: terminating with uncaught exception of type NSException 。
只有这句话,在没有任何详细的报错信息下,我把代码断点后,也一直发现不了缘由。跟腾讯的技术支持交流,那我的他说他也是第一次见这种错误,最后说多是oc与swift混编的问题,叫我用oc写上传视频的代码,还说不少客户都是oc,实践过不少次了都没问题。
我在官网也下载了腾讯云官网的小直播demo,绕过了用户校验,录制视频去上传,上传没有崩溃的信息;我也把上传的代码抽离,写成swift上传,也仍是能够,并无崩溃。这时,我肯定了并非oc与swift混编的问题。我还怀疑是xcode7与xcode8版本不兼容的问题,特地用xcode7和8分别写了一个测试的demo,发现xcode7运行上传视频仍是crash,用xcode8运行仍是crash,但此次crash有缘由,网上一查找缘由,最后获得了一个答案是在

Xcode的Other linker flags 加上 -ObjC。

呜呜,最后终于能够了,解决了崩溃的问题,可苦逼的一个过程了,搞了两天。xcode

对于具体缘由,我网上搜了一些解释:app

 

Other linker flags设置的值实际上就是ld命令执行时后面所加的参数。测试

下面逐个介绍3个经常使用参数:
-ObjC:加了这个参数后,连接器就会把静态库中全部的Objective-C类和分类都加载到最后的可执行文件中。若是静态库中有category,那么须要添加 -ObjC 参数标识,不然可能会报:unrecognized selector sent to instance code

-all_load:会让连接器把全部找到的目标文件都加载到可执行文件中,可是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,而后又使用了这个参数,那么你颇有可能会遇到ld: duplicate symbol错误,由于不一样的库文件里面可能会有相同的目标文件,因此建议在遇到-ObjC失效的状况下使用-force_load参数。
-force_load:所作的事情跟-all_load实际上是同样的,可是-force_load须要指定要进行所有加载的库文件的路径,这样的话,你就只是彻底加载了一个库文件,不影响其他库文件的按需加载视频

相关文章
相关标签/搜索