error: linker command failed with exit code 1 (use -v to see invocation)的几种解决方案

error: linker command failed with exit code 1 (use -v to see invocation)可以说是我们做开发遇到的最多的一个问题了,下面说下我遇到这个问题曾经解决的方案


报错的文件截图

解决方案1:

回忆你最近刚刚写的文件,找到之后查看是否在.m文件中的头文件导入的时候导入的是一个.m文件  ,如果是这样的话,替换你所需要的头文件的.h文件编译既可以通过。

解决方案2:

一般在打包的时候会有这个问题,这里的解决方案是在Xcode中来到Build settings中  搜索bitcode  然后更改属性为No既可以编译通过附带截图如下 


更改bitcode属性为no

解决方案3:

如果之前的解决方案行不通不急  ,继续以下方案 .在Xcode中来到Build settings中  搜索link  然后添加-Objc关键文字, 既可以编译通过附带截图如下


搜索link


添加-ObjC

如果解决问题3没有编译通过  尝试加入-all_load 关键字再次编译。

解释说明:

-ObjC

这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大(因为加载了其他的objc代码进来)。但是如果静态库中有类和category的话只有加入这个flag才行。

-all_load

这个flag是专门处理-ObjC的一个bug的。用了-ObjC以后,如果类库中只有category没有类的时候这些category还是加载不进来。变通方法就是加入-all_load或者-force-load。-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。-force_load在xcode3.2后可用。但是-force_load后面必须跟一个只想静态库的路

最终的结果是这样的


添加的按钮-all_load


添加之后的结果

解决方案4:

如果可悲的伙伴上述的方案依然没有解决你的问题,那么不要灰心。小编在教你几招

如果经过上面的尝试依然没有解决问题,那么应该就是你的第三方的问题了,查看最近加入的第三方框架是否添加了必要的依赖库,可以重新查找在一一添加对应的第三方框架所需要的依赖库,在编译看看是否解决了你的问题哪?


添加对应的第三方库的方法和路径

添加成功后的依赖库:

添加需要的依赖库

最后编译一下看看是不是通过了那? 

解决方案5:

经过上面的方法你依然没有通过  也是醉了的情况 。小编告诉你最后一招就是编辑你的podfile文件,可以考虑把之前pod的文件全部重新删除,然后重新添加,如果你可以定位到大致是哪个第三方的问题,可以在pod之前不需要添加指定版本号。

比如你使用的是pod 'ReactiveObjC', '~> 3.0.0'  可以把, '~> 3.0.0'去掉 在重新pod install一下重新编译 假如使用的是pod 'ReactiveObjC'  这种方式默认是使用最新的第三方。

如果编译还没有通过  重新加载第三方,使用pod update 命令 ,更新所有的第三方之后应该即可编译通过

感谢小伙伴的认真学习,如果我的方法有帮到你,点个❤️支持一下吧~


推荐阅读更多精彩内容