更新可可豆荚后xcode重复符号架构错误

Posted

技术标签:

【中文标题】更新可可豆荚后xcode重复符号架构错误【英文标题】:xcode duplicate symbols for architecture error after updating cocoa pods 【发布时间】:2015-09-16 10:04:18 【问题描述】:

这是我的podFile

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'
pod 'AFNetworking'
pod 'ODSAccordionView', '0.4.4'
pod 'IQKeyboardManager'
pod 'NYXImagesKit', :git => 'https://github.com/Nyx0uf/NYXImagesKit.git'
pod 'PEPhotoCropEditor'
pod 'CocoaAsyncSocket'
pod 'PKRevealController'
pod 'Haneke', '~> 1.0'
pod 'MBProgressHUD', '~> 0.9.1'
pod 'RadioButton'

长期以来,一切都运行良好,但现在,当我更新我的 pod (pod update) 时,这 3 个 pod 得到了更新:

AFNetworking CocoaAsyncSocket IQKeyboardManager

在那之后,什么都没有了。

我收到了 600 多个 duplicate symbols for architecture i386 错误,比如这个:

duplicate symbol _OBJC_IVAR_$_AFHTTPRequestOperation._responseSerializer in:
/Users/myuser/Library/Developer/Xcode/DerivedData/MyProject-emjexnnjljambodthokzwpwcddhz/Build/Products/Debug-iphonesimulator/libPods-AFNetworking.a(AFHTTPRequestOperation.o)
/Users/myuser/Library/Developer/Xcode/DerivedData/MyProject-emjexnnjljambodthokzwpwcddhz/Build/Products/Debug-iphonesimulator/libAFNetworking.a(AFHTTPRequestOperation.o)
... (661 times the same error but pointing to different duplicated files)
ld: 661 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有什么想法吗?

已编辑: 完成如下所示的解决方案后,我的项目仅编译为 iPad Air 而我不能再 Archive,我仍然得到同样的错误...

【问题讨论】:

您是否尝试删除派生数据并清理项目? 【参考方案1】:

我使用“手动重命名所有符号”方法。我遇到了重复符号_OBJC_METACLASS_$_PodsDummy_Pods,所以我在Podfile 中添加了post_install 以避免重复符号。

将您的 pod 文件内容替换为“手动重命名所有符号”

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '7.0'

post_install do |installer_representation|
    installer_representation.project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited), PodsDummy_Pods=SomeOtherNamePodsDummy_Pods'
        end
    end
end

pod 'AFNetworking'
pod 'ODSAccordionView', '0.4.4'
pod 'IQKeyboardManager'
pod 'NYXImagesKit', :git => 'https://github.com/Nyx0uf/NYXImagesKit.git'
pod 'PEPhotoCropEditor'
pod 'CocoaAsyncSocket'
pod 'PKRevealController'
pod 'Haneke', '~> 1.0'
pod 'MBProgressHUD', '~> 0.9.1'
pod 'RadioButton'

已编辑: 从您的项目中删除以下 pod 项目

1.Pods Folder

2.Podfile.lock

3.ProjectName.xcworkspace

然后再次安装 pods

此钩子允许您对生成的 Xcode 进行任何最后更改 在将项目写入磁盘或您可能执行的任何其他任务之前进行项目 想表演。

参考 - 1.https://developerinsider.co/cocoapods-remove-duplicate-symbols-errors/ 2.http://guides.cocoapods.org/syntax/podfile.html#post_install

【讨论】:

我收到此错误:[!] An error occurred while processing the post-install hook of the Podfile. undefined method project for #<Pod::Installer:0x007fd382a10740> 从您的项目中删除以下 pod 项目 1. Pods Folder 2. Podfile.lock 3. ProjectName.xcworkspace 然后重新安装 pod 这是关键!删除文件并再次安装 pod。顺便说一句,我还必须将project 更改为pods_project 。非常感谢它现在可以工作了:) 哪个错误??问题中的错误提及或评论中的错误提及?? 对不起,问题中提到的错误:duplicate symbols for architecture i386【参考方案2】:

即使在删除我的 pod 并重新安装它们之后,我也总是遇到同样的问题。

通过与另一个项目的比较,我终于找到了解决方案。 问题出在项目构建设置中的参数“Other Linker Flags”(OTHER_LDFLAGS)中。这些 pod 不仅通过名称来引用,还通过添加前缀“Pods-myProject”

"-l\"Pods-myProject-AMSlideMenu\"",
"-l\"Pods-myProject-CocoaLumberjack\"",
"-l\"Pods-myProject-DLAlertView\""

所以我只是删除了前缀,一切都是正确的

"-l\"AMSlideMenu\"",
"-l\"CocoaLumberjack\"",
"-l\"DLAlertView\""

【讨论】:

如果它对你有帮助,我很高兴@Nirmalsinh 是的,你的回答对我很有帮助。【参考方案3】:

我通过简单地删除然后重新添加 pod 来修复了一个类似的错误(在混乱的 Cocoapods 升级之后)。备份您的项目,然后运行:

pod deintegrate
pod install

【讨论】:

【参考方案4】:

在我的例子中,我们有一个用 Objective C 和 swift 编写的项目,里面有一个自定义框架模块,为了解决符号重复问题,我们必须从项目和框架模块的 Build Settings 下的 Other Linker Flags 中删除所有标志.

在构建设置之前:

OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", "-all_load" );

在构建设置之后:

OTHER_LDFLAGS = "$(inherited)";

【讨论】:

【参考方案5】:

我认为 Cocoapods 有一个错误,即 pod 源文件可能会被意外复制。

在执行pod update 之后,我的项目一直运行良好,此时出现重复符号错误。

经过一番困惑后,我终于注意到一个 Google pod 包含两个文件。就我而言,它是 GTMOAuth2SignIn.m 和 GTMOAuth2SignIn 2.m。因此,重复符号错误。

请注意,pod 似乎通过通配符来引用文件,指示应包含目录中的所有源。这与显式引用文件的经典 Xcode 项目不同。

另外,我怀疑在构建过程中执行 pod 更新可能是 Cocoapods 的绊脚石。对同一文件的并发访问可能会导致问题。只是一个理论。

另外,这可以解释为什么与此问题相关的一些“解决方案”是删除/删除引用的 pod,然后重新添加。

【讨论】:

【参考方案6】:

什么对我有用:

    阅读错误报告以识别可能包含重复文件的存储库。 将有问题的存储库拖到垃圾箱。 重新克隆您的存储库。 使用正确的远程跟踪设置您的存储库。 git remote add <url.git>,或git remote set-url <url.git>

这绝对对我有用。就我而言,出于某种难以捉摸的原因,当我为本地依赖项运行 git pull upstream develop 时,git 会从多个提交中提取/生成重复文件。

执行上述步骤后,问题消失了,git pull upstream develop 不再一次从多个提交中提取。也许我的仓库有一个奇怪的git 缓存。

【讨论】:

以上是关于更新可可豆荚后xcode重复符号架构错误的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 8.0 更新后架构 arm64 的重复符号

可可豆荚更新破坏了一些东西,现在“豆荚更新”会产生错误

Xcode 12 无法构建可可豆荚 - 生成伞头 [关闭]

安装可可豆荚后出现“ld:找不到选项的目录”构建错误

可可豆荚的 Xcode 12.3 问题

如何从 Xcode 项目中删除其中一个可可豆荚插件