无法在 Linux 中编译目标 c



我正在尝试进入目标C,但是我没有Mac,所以我试图让它在Linux上工作。我发现这两篇文章谈论了在Linux上编译目标C:这一篇

好吧,我忘了说我不想使用gnustep,它似乎已经死了,我不想要所有可可框架,只有目标C语法和C标准库。但是如果没有gnustep!

我无法编译任何代码

如果我尝试编译此代码:

#import <objc/Object.h>
#import <stdio.h>
@interface Number: Object
{
@public
    int number;
}
- (void)printNum;
@end
@implementation Number: Object

- (void)printNum
{
    printf("%dn", number);
}
@end
int main(void)
{
    Number *myNumber = [Number new]; // equal to [[Number alloc] init]
    myNumber->number = 6;
    [myNumber printNum];
    return 0;
}

我会出现分割故障,因为没有初始化的方法也没有异种方法。如果我不从对象继承,则这样:

#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"];
}

我有一个巴士错误。似乎创建接口并实现它们的唯一方法是从nsobject继承。我该如何解决?

顺便说一句,我正在将GCC与-lobjc flag(with gobjc)

一起使用

编辑:好的,因此,如果我不想使用框架,我必须自己创建一个根对象。我怎样才能做到这一点?我想这是类似Malloc的,在Init和发行方法中是免费的,但我不确定。我该怎么做?

这并不是目标C的工作方式。恐怕您需要运行时。目标C的许多好处都是关于跑步而不是编译时发生的事情。如果您拿走图书馆,那么剩下的就不会了。

最新更新