2010-08-13 37 views
4

我正在尝试编写我的第一个定制Cocoa框架,我想从包装一堆功能的框架中公开一个简单的C函数,就像NSApplicationMain一样。当我直接从项目中直接导入文件时,一切都很顺利,项目建立并且我的C函数被正确调用。从定制Objective-C框架中暴露C函数

现在我有一个新的Cocoa Framework项目,其中包含的文件,我不能建立我的程序,因为我得到“符号未找到”的错误消息,专门为我的C函数。

我试过用extern在头文件中加入函数定义的前缀,但还是什么都没有。

任何人都可以给我抬头吗?我如何通过自定义Cocoa Framework公开标准C函数?

的我在做什么

粗略的想法:

我的计划是使用我定制的框架:

#import <BDWebApplicationFramework/BDWebApplication.h> 

int main (int argc, const char * argv[]) { 
    return BDWebApplicationMain(argc, (const char **)argv); 
} 

我的框架标题:BDWebApplication.h

#import <Foundation/Foundation.h> 

@interface BDWebApplication : NSObject { 
    NSString *name; 
} 
@property (readwrite, copy) NSString *name; 

@end 

extern int BDWebApplicationMain(int argc, const char * argv[]); 

我的框架文件: BDWebApplication.m

#import "BDWebApplication.h" 

@implementation BDWebApplication 

@synthesize name; 

- (id)init 
{ 
    [super init]; 
    name = @"New name"; 
    return self; 
} 

- (void)dealloc 
{ 
    [name release]; 
    [super dealloc]; 
} 

@end 

int BDWebApplicationMain(int argc, const char * argv[]) 
{ 
    // Do some Obj-c stuff here 
} 

回答

3

这里的问题几乎肯定被埋在你的Xcode构建设置中,而不是你发布的代码中(这看起来很好)。

第一件事情是:你链接到你的新框架?假设你是,你确定你实际上是在你构建框架时导出你认为是你的符号吗? (有很多选项可以说明这一点,并且其中一些选项具有语义学,而不会让意想不到的事情发生)。

什么可以帮助您诊断这个更有用的是Xcode构建转录本的全文框架和可执行文件。

+0

我原本按照这里找到的说明:http://atastypixel.com/blog/creating-applications-in-xcode-using-frameworks/ 在我的程序项目中创建一个框架项目,它也应该创建一个框架这对我的任何其他项目都是可用的。 我的项目的源代码在这里可用,tar'ed和gziped,供您检查。它只是一个7Mb的下载害羞: http://restafarian.com/stackoverflow/stackoverflow.tgz 感谢您的任何帮助和建议,您可以提供! – omarshariffdontlikeit 2010-08-14 13:01:07

+0

问题的确是您的BDWebAppTest目标未链接到您的BDWebApplicationFramework框架(原文如此)。为了看到这一点,请在目标大纲下披露完整的依赖关系树,并特别注意“链接二进制库”步骤。你现在会看到,它只是连接到Foundation.framework。您可以通过将您的框架拖放到链接框架列表中来解决该问题。 (也可能是RegexKit,因为我假定你的项目引用它是有原因的。) – 2010-08-14 15:53:56

+0

优秀的东西,按照描述工作。据我所知,我不应该将RegexKit与我的程序联系起来,因为它应该与我的框架相关联,因为它只是我的框架,它将在幕后使用RegexKit。 感谢您的帮助,我知道我一定错过了一些东西。我在原博客上发布了一条评论,该博客遵循了我的指示,并要求他将这一步添加到他的指示中。希望这可以帮助其他有类似问题的人。 – omarshariffdontlikeit 2010-08-15 13:08:09