iOS开发接微信SDK报错 ld 631 duplicate symbols for architecture arm64 linker command failed with exit code 1

        在接第三方SDK时,因为其对微信SDK版本有最低版本是1.8.6.2的要求,需要升级原来已接微信SDK版本。在微信开放平台官网下载最新SDK(iOS1.8.7.1版)后,按照官方介绍流程接入,但运行时报错(有点懵了)。因为对iOS和Xcode的运行机制和库文件加载原理不熟悉,导致我花了将近五个小时才解决这个因为微信SDK版本升级带来的问题(非常郁闷),所以做个记录,以备以后用到。

    这是当时运行报错:

iOS开发接微信SDK报错 ld 631 duplicate symbols for architecture arm64 linker command failed with exit code 1

        在网上查找很多的资料,试了资料中说的各种方法后,都没有实际解决我出现的问题。但大概知道是新加的libWeChatSDK.a和之前加的库冲突了,other linker flags中-ObjC 和 -all_load加载方式导致的问题(这两种方式是按照微信文档要求填写)。

        后来修改了other linker flags中的加载方式,去掉-all_load改成-force-load方式加载,保留了-ObjC。

iOS开发接微信SDK报错 ld 631 duplicate symbols for architecture arm64 linker command failed with exit code 1

但是这样直接编译运行时还是报错(手动黑人问号脸)。

iOS开发接微信SDK报错 ld 631 duplicate symbols for architecture arm64 linker command failed with exit code 1

    最后-ObjC加载方式也去掉,用-force-load方式手动添加需要的库和类(方法有点笨????),这回编译运行过了,没有再出现问题(很开心,终于解决了)。有的项目可能不需要这样就能解决问题,去掉-ObjC反而会报错。

iOS开发接微信SDK报错 ld 631 duplicate symbols for architecture arm64 linker command failed with exit code 1

 

总结:需要对Xcode中other linker flages参数-ObjC、-all_load、-force_load等方式有所了解,并且对一些常见的报错问题知道大概原因,以便能快速定位。

 

参考文章:https://blog.****.net/u012701023/article/details/86651456

                 https://blog.****.net/w15117957952/article/details/83061132