iOS引入第三发库引发的错误linker command failed with exit code 1

来源:互联网 发布:directx修复软件 编辑:程序博客网 时间:2024/06/05 04:03

引入第三发库导致项目崩溃

常见出错日志:

Apple Mach-O Linker Error Group

linker command failed with exit code 1 (use -v to see invocation)

如果出现这种错误,那么一定是引入第三个库时导致的,如果是协同开发使用git.有可能是其他同事添加了,没有同步到仓库中,也有可能导致此错误。

首先,你只看这个错误时无法精确找到问题的原因的,你需要打开详细的出错日志,在里面你能看到哪些库和哪些原因导致出错。

Tips:操作后如果还不行,可以清理项目或者重启xcode.

如何打开详细项目编译错误?

选中错误,右键选择Reveal in Log ,如下图:


可能导致的原因

一、引入静态库导致的编译错误

错误一:在之前添加过某个库,之后删除再添加时如果引发如下错误

"_OBJC_CLASS_$_XXXXXXXX", referenced from:
       可能是导入的第三方库导致,尝试将other linker flags 的参数设置为-Objc或者补充中的几个参数

补充:other Linker flags 参数说明

Targets选项下有Other linker flags的设置,用来填写XCode的链接器参数

-ObjC/-Objc:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld:duplicate symbol错误(duplicate:重复),因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载

错误二:真机可以运行,模拟器运行错误,

"Undefined symbols for architecture x86_64"

导致这个原因可能是使用的某静态库是针对真机的,所以模拟器为没有定义或者不是X86_64的架构,因为静态库可以针对模拟器和真机分别生成(据说有把两个和在一起的方法),

解决:你就只有只运行真机或者模拟器,或者将两个静态库合并。或者设置build setting中的Build Active Architecture Only 为NO试试或者targets ->build setting 下的architectures 设置为 standard architetures(armv7,armv7s) 和vaild architectures 设置为armv7,armv7s(不过目前好像必须要有arm64,不过可以试试)

比如:微信SDK有可能发生这种情况

补充:静态库制作与架构兼容性问题【传输门】静态库和架构理解【传输门】

二、缺少依赖库

"ld: symbol(s) not found for architecture x86_64"

你在引入其他第三方库(特别是手动导入)的时候可能需要导入系统依赖库。

解决:通过查看详细日志,发现具体需要导入哪些依赖库,在build phases ->link binary with libraries中添加即可。 

比如:导入支付宝的SDK,你需要添加其他的依赖库

补充参考:【传输门】【秘密通道】

三、重复导入库

"duplicate symbols for architecture arm64"

这种情况就是库的重复导入,比如你通过cocoapod导入过,之后又手动导入过,还有就是其他的第三方库包含的那个库也会出错。

解决:a.移除重复的库,  b.参考一中的补充(针对其他库包含导致的库冲突)

补充:移除cocoapod添加的库【点我呀】

四、删除重复库后,出现无法找到库

"library not found for -lXXXXXXXX"

这种情况,你先确保库存在,如果你时像我一样,更改podfile 后install 依然存在库冲突,而且你是通过手动删除pods/pods中的冲突库的话,那么你需要删除other linker中的-XXXXXXXX之后清理项目,如果还出现此问题(应该会的),在搜索中查找XXXXXXXXX之后如下图,如果是配置文件里找到(不是在代码里),可以把它删除试试,反正我是成功了的。


五、使用git协同开发未同步到的问题

比如:你在公司电脑上解决了第三方库导入的问题,并且 提交到git仓库,回到家后,把项目pull出来,甚至重新复制出来,你会发现what fuck!!!!!脑子的项目怎么还是出现同样的错误,不是解决了吗?这时候你按照原来的结局路径可能解决,

问题:怎么将项目配置改动也同步?暂时未知


六、 项目没问题,check out新项目出现不能找到某个库或者文件

/Users/XXXX/XXXXX/TAXHeaderSheetDemo.xcodeproj The file “Pods.xcconfig” couldn’t be opened because there is no such file. (/Users/XXXX/kanaishinichi-TAXHeaderSheet-8b83e84/Pods/Pods.xcconfig)

解决: pod install 或者pod update



阅读全文
0 0