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

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,不喜勿喷。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,569评论 25 709
  • 准备工作 Jenkins的安装 Jenkins依赖于Java环境,首先需安装和配置Java环境(PS:在下载的时候...
    _Artillery阅读 10,137评论 6 22
  • 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广...
    闲云清烟阅读 7,288评论 1 4
  • 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段。用户们都是很挑剔的。如果一个公司的推广...
    偏偏就是祢阅读 12,987评论 34 59
  • 离开熟悉的地,独自一个人前往。 越长大越厌倦了出行,被迫离开熟悉的周遭踏上远行的路途。在陌生的环境里保持长久的沉...
    碧云女子阅读 2,823评论 2 3

友情链接更多精彩内容