征服Unity3dunity3D技术分享Unity跨平台技术分享

Jenkins打包iOS报duplicate错误的正确解决办法

2018-03-13  本文已影响32人  Jens丶
Unity摊

好久没有写博客,最近一直在使用Jenkins对iOS和Android打包,多多少少遇到一些问题,这里暂时先记录打包iOS报duplicate的错误;

主要分为以下两种情况:

情况1

静态库内容重复.jpg

其实有些人在打包的时候经常会见到类似于下面这种错误

clang:error:linker command failed with exit code 1(use -v to see....)

然后大家就开始百度诸如这样的错误解决方案, 我也是如此。
但是这并不能高效的解决遇到的问题(稍后再说),还有可能引起其它问题的产生,所以一定要详细的去看报错信息。

在这句话的上面看到

ld: 591 duplicate symbols for architecture arm64

再往上面看的话,就会看到

LKSDKDiamond.framework/LkSDKDiamond(BundleHelper.o) 
和 LKSharePlugin.framework/LKSharePlugin(BundleHelper.o) 

很明显, 这两个框架下有相同命名(BundleHelper)的类,
后来找到的相应的SDK开发人员,确认不小心命名相同,改正即可。

细心的人如果再往上看的话,就会发现

LKSDKDiamond.framework/LkSDKDiamond 和
Classes/libWeChatSDK.a

一些重复报错loog, 经过沟通发现,两个SDK都要用到libWeChatSDK.a,而其中一个sdk已经将.a打包进去,另外一个sdk需要导入.a使用,因此重复。最好的解决办法就是:把libWeChatSDK.a抽离出来,以免以后还会有其它sdk使用。

情况2

第三方库和系统库冲突.jpg 第三方库和系统库冲突.jpg

这种duplicate是:第三方库和系统库 之间的冲突,网上也有人问过 有人问过,但是没人解决。

百度一下.png

说起来这个错误,可能还要源于第一种情况,为了解决第一种情况,试尽了网上所有的办法, 却不想又产生这个问题,所以大家在解决问题的时候一定要注意自己修改了什么,最关键的是弄清楚问题的本质。

就像这个问题本质就是:”两个静态库内有冲突“
百度一下解决方案一大堆,而且都是大同小异,这里感谢这个博主的文章

推荐大家用这种方法解决:
删除掉 Other Linker Flag 的 -all_load 就可以解决静态库冲突的问题
使用抽离合并在生成.a的方法太麻烦。

最后总结一下:

1. 解决问题一定要看清日志,弄清楚问题的本质再去搜索答案;
2. 跨部门之间沟通很重要,合作解决问题效率更高
3. 遇到问题总结一下吧~

ps:刚接触Jenkins,不喜勿喷。

上一篇下一篇

猜你喜欢

热点阅读