React Native iOS端编译报错:45 duplicate symbols,Linker command failed with exit code 1
兄弟我之前也踩过这个一模一样的坑!别慌,你的RN安卓运行正常但iOS报重复符号、链接失败的问题,大概率是依赖库重复链接或者Pod配置冲突导致的,结合你已经修改过Podfile、删重装过Pods的操作,给你几个亲测有效的排查和解决步骤:
检查重复引入的依赖库
打开Xcode项目,进入Build Phases->Link Binary With Libraries,仔细看看有没有同一个第三方库被多次添加的情况——比如某些库可能既通过React Native的自动链接机制被加入,又被手动添加了一遍。找到重复的条目直接删掉就行,另外也可以检查项目的Frameworks目录,看看有没有重复的静态库文件,有的话一并清理。彻底清理缓存和构建产物
有时候Xcode的缓存会残留旧的链接信息,导致奇怪的冲突,先执行这几个命令彻底清理:# 删除Xcode全局缓存 rm -rf ~/Library/Developer/Xcode/DerivedData # 清理项目的构建文件 xcodebuild clean -workspace YourApp.xcworkspace -scheme YourApp -configuration Debug执行完后重启Xcode,再尝试编译项目。
调整Podfile配置,避免自动链接冲突
如果你在Podfile里手动声明了一些库,同时React Native的自动链接也在处理这些库,就很容易出现符号重复。可以试试这几个调整:- 在Podfile开头添加
use_frameworks! :linkage => :static(如果之前没加的话),统一用静态链接方式; - 对明确冲突的库开启模块化头文件,比如:
pod 'ConflictLibraryName', :modular_headers => true - 检查Podfile里有没有重复声明的pod条目,删掉重复的后,重新执行:
pod deintegrate pod install
- 在Podfile开头添加
排查第三方库的版本兼容性
有些老旧的RN第三方库和新版本的React Native、iOS SDK不兼容,会导致符号重复定义的问题。可以试试把报错相关的库升级到最新稳定版本,或者去对应库的GitHub仓库看看有没有其他开发者碰到类似问题的issue,比如有些库需要从动态库切换成静态库才能兼容。检查Xcode的Other Linker Flags配置
进入Xcode项目的Build Settings,搜索Other Linker Flags,看看有没有重复的-l开头的链接参数(比如-lSomeLibrary出现多次),删掉重复的条目。如果还是不行,可以尝试添加-ObjC或者-all_load参数(不过这个要谨慎测试,可能会引发其他依赖问题)。
备注:内容来源于stack exchange,提问作者Jehanzeb Siddiqui

