首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XCode 5-架构armv7的未定义符号:

XCode 5-架构armv7的未定义符号:
EN

Stack Overflow用户
提问于 2014-04-11 15:23:35
回答 2查看 212关注 0票数 0

我从一个静态库中得到了一个类的错误,我已经自己编译了这个库。它一直工作得很好,我想添加另一个类作为一个简单的数据传输对象,名为PPClientData。错误是:

架构armv7的未定义符号:"_OBJC_CLASS_$_PPClientData",来自: objc-class-ref的cpIntegrationDelegate.o中的引用

相关文件包含在库编译目标中,我在(fat)库中使用了otool -d,它显示了

A(PPClientData.o)(体系结构armv7):(__DATA,--data)部分

应用程序中包含的类(PPClientData.h)的头部如下所示:

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface PPClientData : NSObject
    @property(nonatomic, strong) NSString* clientId;
    // 3 others identical to the above with different names
@end

应该编译到库中的.m文件如下所示:

代码语言:javascript
复制
#import "PPClientData.h"

@implementation PPClientData
@synthesize clientId;
//Synthesize others

-(id)init {
    self = [super init];
    return self;
}
@end

它在应用程序中的单个类中使用,如下所示。如果使用它的这个函数被注释掉,链接器错误就会消失(它会链接到库中的其他类),但是这样做会失败。这是库的委托函数。

代码语言:javascript
复制
#import "CPPIntegrationDelegate.h"
#import "PPClientData.h"

@implementation CPPIntegrationDelegate

// Various other functions that work fine

-(PPClientData*)clientData:(PPIntegration*)integration {
    PPClientData* dict = [[PPClientData alloc]init];      // This is the line that causes the linker error
    dict.clientId = @"whatever";
    // set other properties of dict
    return dict;
}

我理解链接器试图做什么,以及错误意味着什么,但我不知道我错过了什么。有人能帮忙吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-22 16:13:06

这并不是导致问题的架构,而是xcode或其他方面被我所使用的类的前向声明的顺序和定义本身所混淆。最初,被破坏的代码如下所示:

BrokenClass.h

代码语言:javascript
复制
// Definitions etc.

GoodClass.h

代码语言:javascript
复制
@class BrokenClass;
- (BrokenClass*)someMethod:(SomeType*) param;

GoodClass.m

代码语言:javascript
复制
#import "BrokenClass.h"

- (BrokenClass*)someMethod:(SomeType*) param
{

}

它是通过将GoodClass.h包含到头文件中而被包含到我的应用程序中的,头文件转发声明的BrokenClass,然后将BrokenClass.h包含到一个应该已经完成定义的m文件中,在这个文件中使用该类。

无论如何,为了修复它,我将GoodClass代码更改为:

GoodClass.h

代码语言:javascript
复制
#import "BrokenClass.h"
- (BrokenClass*)someMethod:(SomeType*) param;

删除m文件中的#import,然后在我的应用程序中只包含一个GoodClass.h (它引入了BrokenClass)。

不管这是个错误,还是更有可能,我有太多的前向声明等等,我不确定。

票数 0
EN

Stack Overflow用户

发布于 2014-04-11 17:53:48

如果使用Xcode 5.1,请尝试从有效的体系结构(在构建设置下)中删除arm64,并将体系结构从“标准体系结构”更改为只有armv7和armv7s。这可能与您相关:how to stop xcode5.1 building for 64bit

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23016635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档