【问题标题】:Multiple attempts to fix Error: linker command failed with exit code 1多次尝试修复错误:链接器命令失败,退出代码为 1
【发布时间】:2016-03-17 01:31:51
【问题描述】:

过去几天我一直在处理这个错误,但我真的被卡住了。我不断收到链接器命令错误,无法通过它。我在网上搜索并尝试了所有提示:检查重复文件、重新安装 pod、将活动架构设置为 NO、删除派生数据、清理很多次。

这是我得到的输出:

duplicate symbol _OBJC_IVAR_$_SessionPlayer._nextEvent in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_IVAR_$_SessionPlayer._visitors in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_IVAR_$_SessionPlayer._currentSessionTimeInMilliseconds in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_IVAR_$_SessionPlayer._systemTimeInMilliseconds in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_CLASS_$_SessionPlayer in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_METACLASS_$_SessionPlayer in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_IVAR_$_SessionPlayer._isPlaying in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_IVAR_$_SessionPlayer._useTiming in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_IVAR_$_SessionPlayer._delegate in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o
duplicate symbol _OBJC_IVAR_$_SessionPlayer._timeline in:
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayer.o
/Users/user1/Library/Developer/Xcode/DerivedData/***-APP-NAME-bahimtombyapwkcekphmmbaifpqx/Build/Intermediates/***-APP-NAME.build/Debug-iphonesimulator/***-APP-NAME.build/Objects-normal/x86_64/SessionPlayerViewController.o

ld: 10 duplicate symbols for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

真的不知道怎么办,很郁闷。

编辑:发现我的所有文件都被编译了两次,这可能是问题所在。

【问题讨论】:

  • 您能否检查一下您是否可能在 SessionPlayerViewController 的顶部使用了 #imported SessionPlayer.m 而不是 SessionPlayer.h
  • @BenZotto SessionPlayerViewController.m 导入 SessionPlayer.h
  • 嗯。我相信这个错误告诉你几个SessionPlayer实例变量符号(nextEventvisitorscurrentSessionTimeInMilliseconds等)出现在两个对象文件中,应该'不会发生。对象 (.o) 文件是编译每个 .m 实现的构建的中间输出。如果您出于某种原因最终在两个文件中定义了相同的内容(并且在某处意外导入 .m 而不是 .h 可以做到这一点,这就是我建议的原因),则可能会发生这种情况。也许发布 SessionPlayer 的声明?
  • @pico0102,pod 中的任何文件也不需要在主项目中单独引用。您应该能够从主项目中删除对此(和其他重复)文件的所有特定引用。
  • @pico0102,我会发布一个更正式的答案来帮助澄清我的意思。

标签: objective-c xcode linker-errors


【解决方案1】:

听起来您在目标的构建中包含了两次SessionPlayer.m 的源代码。根据某些 cmets,这可能是因为您通过 pod(这是您想要的)隐式引用文件,并且通过直接引用/包含(其中你想要;这就是豆荚的用途)。尝试执行以下操作(我会尽量在文本中做到清晰,但如果您有任何问题,我可以附上屏幕截图):

  1. 在项目导航器窗格中,选择您的项目。
  2. 在项目编辑器窗口中,选择您的应用目标(确保它不是 UnitTest/LogicTest 目标)。
  3. 在项目编辑器窗口的顶部,选择“Build Phases”
  4. 在主项目编辑器窗口中,现在应该有一个可扩展部分的列表,其中之一是“编译源(xxx 项)”,其中 xxx 是用于构建目标的源文件的数量。展开该部分。
  5. 在搜索/过滤文本字段(项目编辑器的右上角,占位符文本显示“过滤”)中,输入“SessionPlayer”
  6. 我怀疑您在此处明确包含了SessionPlayer.m,因此您应该在列表中至少看到一个实例。选择列表底部显示的“-”按钮将其删除。
  7. 尝试重建并查看至少与SessionPlayer.m 相关的链接器错误是否消失。如果是这样,请对任何其他此类文件重复上述步骤。

希望这会有所帮助。

【讨论】:

  • 这行得通!!!!它以同样的错误移动到测试目标上。做了同样的事情,现在它建成了!你太棒了!
  • @pico0102 不,只是经历过 :) 我也经历过同样的痛苦,很高兴能帮上忙!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
相关资源
最近更新 更多