美文网首页征服Unity3dunity3D技术分享Unity跨平台技术分享
Jenkins打包iOS报duplicate错误的正确解决办法

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

作者: Jens丶 | 来源:发表于2018-03-13 14:57 被阅读32次
    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,不喜勿喷。

    相关文章

      网友评论

        本文标题:Jenkins打包iOS报duplicate错误的正确解决办法

        本文链接:https://www.haomeiwen.com/subject/nakzfftx.html