1

在开发 iOS 应用程序时,我们一直遇到同样的问题 - 在一些 git pull / merge of changes 之后,我们得到

duplicate symbol _OBJC_CLASS_

链接器错误

对于不同的班级。如果从“目标/构建阶段中的编译源选项卡”中删除源文件(如果它是重复符号 _OBJC_METACLASS_$_User 则说 User.m),则可以删除此错误。

完整的错误如下所示:

duplicate symbol _OBJC_CLASS_$_GridView in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/GridView-9FDDD336172B4A48.o
duplicate symbol _OBJC_METACLASS_$_GridView in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/GridView-9FDDD336172B4A48.o
duplicate symbol _OBJC_METACLASS_$_User in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/User.o
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Products/Debug-iphoneos/libRestKit.a(User.o)
duplicate symbol _OBJC_CLASS_$_User in:
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Intermediates/App.build/Debug-iphoneos/App.build/Objects-normal/armv7/User.o
    /Users/user/Library/Developer/Xcode/DerivedData/App-bjpymtdfvzxkembjocjjpbswfoul/Build/Products/Debug-iphoneos/libRestKit.a(User.o)
ld: 4 duplicate symbols for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
4

1 回答 1

2

这里有几件事可以尝试:

  1. 检查您的项目,看看您是否从两个不同的位置导入了相同的文件。看看你的项目 | 目标 | 构建阶段(选项卡)| 再次编译源部分并确保文件(GridView.m 和 User.m)不会出现两次。该列表按添加日期而不是文件名对文件进行排序,因此您可能错过了它。

  2. 此外,您似乎正在静态链接外部库 libRestKit.a。您或您团队中的其他人是否正在导入 RESTKit 的源代码以及静态库?如果两者都有,您将获得重复的符号。

  3. 最后,确保没有人在代码中的某处导入带有 #import "User.m" 或 #import "GridView.m" 之类的 .m 文件——尽管那个似乎不太可能,因为您可以通过以下方式解决问题删除有问题的源文件。

在每个人都拥有相同的构建配置之前,您将继续遇到这些问题,因此您应该让每个人都提交并签入他们的所有代码。修复任何合并冲突,让您的本地存储库完全符合您系统上的要求,然后推送。然后,让团队的其他成员删除他们的存储库并进行新的克隆。希望每个人都从同一个代码库/项目开始,这样可以避免问题再次发生,甚至可以指出问题发生的位置,这样您将来就可以避免它。

此致。

于 2013-02-23T23:57:09.480 回答