Git拉动导致重复符号_OBJC_CLASS_一直?

时间:2013-02-23 22:57:55

标签: ios objective-c linker clang

在开发iOS应用程序的过程中,我们遇到了同样的问题 - 经过一些git pull / merge变更后我们得到了

duplicate symbol _OBJC_CLASS_

链接器错误

适用于不同的课程。如果从“目标/构建阶段中的编译源选项卡”中删除源文件(例如User.m,如果它是重复符号_OBJC_METACLASS _ $ _ User),则可以删除此错误。

完整错误如下所示:

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)

1 个答案:

答案 0 :(得分:2)

以下是一些尝试:

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

  2. 此外,它看起来像是在外部库libRestKit.a中静态链接。您或团队中的其他人是否导入了RESTKit以及静态库的源代码?如果你有两个,你会得到重复的符号。

  3. 最后,确保没有人在代码中的某处导入一个.m文件,例如#import“User.m”或#import“GridView.m” - 尽管那个人似乎不太可能能够通过删除有问题的源文件来解决问题。

  4. 在每个人都拥有相同的构建配置之前,您将继续解决这些问题,因此您应该让每个人都提交并签入所有代码。修复任何合并冲突,让你的本地回购正是它应该在你的系统上,然后推送。然后,让团队的其他成员删除他们的回购并进行新的克隆。希望每个人都从相同的代码库/项目开始将消除问题再次发生,甚至可能指向问题发生的位置,以便将来可以避免它。

    最好的问候。