iOS App Archive 时报:linker command failed with exit code 1 (use -v to see invocation) 问题原因及解决方案汇总
在 iOS App 开发过程中,经常会遇到该问题:
linker command failed with exit code 1 (use -v to see invocation)
我在解决该问题的过程中,收集整理了一般引发该问题的原因以及对应的解决方法。
BitCode
新建一个 iOS 项目时, xcode 默认会将 bitcode
项设置为 YES
,即启用,如果我们引入了一些不支持 bitcode 的第三方库,会引起这个问题。
bitcode
是一种编译结果中间态,它并不能直接运行,但是它包含了一个程序所需要的所有内容,它最终将被编译成为可运行的二进制包,启用 bitcode 的好处是,苹果可以随时根据自己的优化,基于 bitcode 生成更优化的二进制包,而不需要我们重新上传新的版本。iOS
默认开启,但是可以关闭,watchOS
下则是必须开启的,mac OS
不支持,如果我们开发的程序只支持iOS
,那么可以选择关闭它。
尝试使用以下方式解决:
- 打开 Build Settings
- 将 Enable Bitcode 设置为
NO
添加了第三方库,且不是静态库
如果添加了第三方库,且该库不是静态库之后发生此问题,那么可以尝试:
- 先按上面 BitCode 的方式解决,若不行
- 打开 Build Settings
- 找到 Linking
- 将 Other Linker Flags 改为
-all_load
或者-ObjC
,视情况而定,多试几次。
引入了重复的包
……
duplicate symbol _OBJC_IVAR_$_RCTHTTPRequestHandler._session in:
/Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libReact.a(RCTHTTPRequestHandler.o)
/Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libRCTNetwork.a(RCTHTTPRequestHandler.o)
duplicate symbol _OBJC_METACLASS_$_RCTHTTPRequestHandler in:
/Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libReact.a(RCTHTTPRequestHandler.o)
/Users/pantao/Library/Developer/Xcode/DerivedData/chongaiApp-dixtnlpvsctvmwdzrkacqqenegoh/Build/Intermediates.noindex/ArchiveIntermediates/chongaiApp/BuildProductsPath/Release-iphoneos/libRCTNetwork.a(RCTHTTPRequestHandler.o)
ld: 485 duplicate symbols for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
这个问题是我这次遇到的,
一直以为 上面这一段提示只是警告,但是其实它才是导致这个问题产生的原因,我最后是根据提示, symbol _OBJC_METACLASS_$_RCTHTTPRequestHandler
同时在 libReact.a
与 libRCTNetwork.a
中定义了,我后来是一个一个的删除提示里面的多余的引用,解决问题。
- 打开 Build Phases
- 找到 Link Binary With Libraries (N items)
- 根据提示中,删除重复项(名称有可能不同,但是里面的内容可能是一样的)
评论已关闭