2013-06-01 83 views
2

是否有任何方法可以在不使用GNUStep的情况下编译ubuntu上的目标c程序?我想使用默认的C标准库,除了Objective-C的OOB语法外。我现在面临的问题是一旦我有了所有的方法,我需要一种方法来调用它们。在Mac中,我只是分配和初始化它,但在Linux上尝试编译时,clang只是给了我一个错误...任何帮助将非常感激。在没有gnustep的情况下编译目标c程序

#include <stdio.h> // C standard IO library (for printf) 
#include <stdlib.h> // C standard library 
// Interface 
@interface test 
-(void)sayHello :(char *)message; 
@end 

// Implementation 
@implementation test 
-(void)sayHello :(char *)message { 
    printf("%s", message); 
} 

int main(int argc, char *argv[]) { 
test *test = [[test alloc] init]; 
[test sayHello:"Hello world"]; 
} 
+1

哪里是你的执行情况'alloc'和'init'从哪儿来没有GNUstep的(或Objective-C的运行时库)? –

+0

是啊有没有办法从没有'alloc'或'init'的实现中调用方法? –

+0

现代GNUstep运行时既没有实现+ alloc也没有实现-init。如果你想要它们,你可以覆盖任何地方的实现。 + alloc的实现应该只调用class_createInstance(...)请查阅您的.h以获取其余必需的API。你可能也想考虑如何使用@autorelease ie。如何管理保留柜台等。我不知道为什么一个人真的想要走这条路,只需安装GNUstep基础。 –

回答

0

您可以编译的Objective-C使用gcc,但要记住让编译器知道你用什么语言来使用-lobjc开关。

您还需要包括以下标题:

#import <objc/Object.h> 

...并从接口继承对象。见Objective-C的这里的Hello World示例:

http://en.m.wikipedia.org/wiki/List_of_Hello_world_program_examples#O

+0

正是我在找什么。 **非常感谢!**:D 我使用Ubuntu发现的另一个指南,http://ubuntuforums.org/showthread.php?t=1064045 –

+0

如果您使用的是现代GNUstep运行时,此解决方案将不起作用。没有实现这些方法,一旦你想要clang的客观方言,事情就会破裂。我个人不会那样做。 –

+1

我试图尽可能避免GNUstep。我希望代码尽可能与ObjectiveC的一些OOB特性(如实现和接口)一样C。 –

相关问题