如何用GCC编译Objective-C代码?
当我试图编译这段代码时,我用gcc得到了以下格式:如何用GCC编译Objective-C代码?,objective-c,gcc,Objective C,Gcc,当我试图编译这段代码时,我用gcc得到了以下格式: #import <stdio.h> #import <objc/Object.h> @interface Hello: Object - (void) init; - (void) say; @end @implementation Hello - (void) init { [super init]; } - (void) say { printf("Hello, world!\n"); } @end i
#import <stdio.h>
#import <objc/Object.h>
@interface Hello: Object
- (void) init;
- (void) say;
@end
@implementation Hello
- (void) init {
[super init];
}
- (void) say {
printf("Hello, world!\n");
}
@end
int main() {
Hello *hello = [Hello new];
[hello say];
[hello free];
return 0;
}
如果我试着跑-我会得到SIGSEGV:
$> ./test
$> Segmentation fault
我做错了什么
env:linux-x86_64,gcc-4.7.2
谢谢。那个代码错了。而且很古老。它永远不会起作用。现在它已经(修复并添加了一些额外的示例) 首先,检查是否安装了GNUStep。如果这样做,请切换到使用NSObject和libFoundation(实际上是
libgnustepbase
,正如弗雷德在评论中指出的那样)
其次,[IIRC——在这里抓取旧的脑细胞,init
仍然返回(id),而Object仍然是根类。由于在init
方法中没有做任何有用的事情,只需将其完全删除即可
编译器错误表明您的
Hello
子类没有正确地从对象继承,这毫无意义。它应该是-x objective-c
而不是-x objective-c++
?@KevinDTimm,同样的错误。@bumm,维基百科再次撒谎。谢谢你。@niXman这不是撒谎,只是不适合剪切和粘贴。请允许我为尼克斯曼更正bbum的评论,在GNUstep it的libgnustep base中,libFoundation实际上是作为一个不同的项目存在的,在某些情况下,或者曾经可以与libgnustep-base互换。感谢您的更正——自从我在Linux上编译ObjC以来,已经有十多年了。事实上,维基百科的文章一直在撒谎,直到我修正了它。代码不起作用,neve也会有。啊,我以为他指的是Objective-C文章。
$> ./test
$> Segmentation fault