xcode 4.6.1和LLVM 4.2:ld:2架构armv7的重复符号

Æle*_*lex 0 xcode linker frameworks objective-c linker-errors

我本周首次尝试建立公司iOS库/框架,遵循此博客文章中的步骤.

由于超出此问题的原因,我只能在为设备构建而不是为模拟器建立链接.

但是,现在我收到一个非常奇怪的错误:

ld:架构armv7 clang的2个重复符号:错误:链接器命令失败,退出代码为1(使用-v查看调用)

有问题的线条表明:

重复符号_OBJC_CLASS _ $ _ iContactsGridCell in:/ Users/* /Desktop/Projects/contactservice/branch/ContactServicesClient/DerivedData/iContacts/Build/Intermediates/iContacts.build/Debug-iphoneos/iContacts-5.1.build/Objects-normal/armv7/ iContactsGridCell.o /Applications/Xcode.app/Contents/Developer/Library/Frameworks/athium-iOS.framework/athium-iOS重复符号_OBJC_METACLASS _ $ _ iContactsGridCell in:/ Users/*/Desktop/Projects/contactservice/branch/ContactServicesClient/DerivedData /iContacts/Build/Intermediates/iContacts.build/Debug-iphoneos/iContacts-5.1.build/Objects-normal/armv7/iContactsGridCell.o /Applications/Xcode.app/Contents/Developer/Library/Frameworks/athium-iOS.framework/athium-IOS

显然,有问题的类是iContactsGridCell.h

该类本身继承自Cell.h

@interface iContactsGridCell : Cell
Run Code Online (Sandbox Code Playgroud)

类Cell.h是框架的一部分,如果我不输入正确的文件,然后按预期我得到一个语义错误:无法找到电池接口声明等等等等.

但是,当我导入它时,我得到以下重复错误.除了iContactsGridCell.h之外,该文件不包含在项目的任何其他位置!

反过来,文件Cell.h只是在框架下找到的一个类:

@interface Cell : NSObject

@property (strong,nonatomic) UIView *view;
@property CGRect rect;
@property int UID;
@property BOOL highlighted;
@property UIColor *b_colr;

- (id) initWithRect:(CGRect)frame;
- (BOOL) hasCoordinates:(CGPoint)coord;
- (void) ripple;
- (void) cubefy;
- (void) flipfy;
- (void) rotate;
- (void) setBg:(UIColor *)bg withAlpha:(CGFloat)alpha;
- (void) highlight;
- (void) unhighlight;
- (void) updateWithRect:(CGRect)rect;

@end
Run Code Online (Sandbox Code Playgroud)
  1. 为什么我得到重复的错误?
  2. 可能是什么导致了这个?
  3. 它怎么能修复?
  4. 我怎样才能得到更多信息的更详细的输出,其中重复的发现?

PS:我已经按照博客上发现的信息进行了跟踪.然而,我无法链接模拟器(得到错误的架构错误)所以我的猜测可能是框架中的某些东西被打破而不是项目本身.这可能是重复错误的原因吗?

Man*_*nOx 8

有几个地方可能会出现此错误.我会执行以下操作来开始搜索问题:

  1. 使用finder搜索项目文件夹,查看文件"iContactsGridCell.h"是否存在.或者如果某处存在任何两个文件.
  2. 确保您没有两个具有相同名称的类iContactsGridCell的对象,例如:

iContactsGridCell*myObj; iContactsGridCell*myObj;

  1. 确保你不做这样的事情:#import"iContactsGridCell .m "

  2. 或者像这样:#import"iContactsGridCell.h"#import"iContactsGridCell.h"

  3. 确保你没有重新声明一个类(包括Apple在其框架中提供的类)

要点:这就是我能想到的全部.但要记住的是,项目中的某个地方存在两个对象,类声明等.这是相同的.并且编译器因此而抱怨.

为什么编译器会抱怨(更多信息):虽然这些信息实际上是"不必要的",但作为一名程序员来理解底层发生的事情并经常帮助调试是一种很好的做法,所以这里有一些关于编译器的信息:

请记住,编译器(虽然更复杂)是一个程序,就像您使用它创建的程序一样.其中的大部分步骤(如果不是全部)编译器在一个点上经历或其他阅读代码创建的每个变量,类,结构ECT"符号或按键".因此,在某些时候,编译器达到了一行代码"在其他地方重复/重复".因此编译器完成例程的"键/符号"创建过程失败.