gpt4 book ai didi

objective-c - 如何使用 GCC 编译 Objective-C 代码?

转载 作者:搜寻专家 更新时间:2023-10-30 20:10:02 24 4
gpt4 key购买 nike

当我尝试编译这段代码时,我得到了形式 here使用 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

int main() {
Hello *hello = [Hello new];
[hello say];
[hello free];
return 0;
}

使用命令行:g++ -x objective-c++ test.mm -otest -lobjc

编译时我收到以下警告:

test.mm:11:14: warning: ‘Object’ may not respond to ‘-init’ [enabled by default]
test.mm:11:14: warning: (Messages without a matching method signature
[enabled by default]
test.mm:11:14: warning: will be assumed to return ‘id’ and accept
[enabled by default]
test.mm:11:14: warning: ‘...’ as arguments.) [enabled by default]
test.mm: In function ‘int main()’:
test.mm:19:28: warning: ‘Hello’ may not respond to ‘+new’ [enabled by default]
test.mm:21:14: warning: ‘Hello’ may not respond to ‘-free’ [enabled by default]

如果我尝试运行 - 我会收到 SIGSEGV:

$> ./test
$> Segmentation fault

我做错了什么?

环境:linux-x86_64,gcc-4.7.2

谢谢。

最佳答案

该代码是错误的。又古。它永远不会奏效。现在它会(修复并添加一些额外的例子)。

首先,检查您是否安装了 GNUStep。如果这样做,请切换到使用 NSObject 和 libFoundation(实际上是 libgnustep-base,正如 Fred 在评论中指出的那样)。

其次,[IIRC -- 在这里抓破旧脑细胞] 当 Object 仍然是根类时,init 仍然返回 (id)。由于您在该 init 方法中没有做任何有用的事情,只需将其完全删除即可。

编译器错误表明您的 Hello 子类没有正确继承自 Object,这是没有意义的。

关于objective-c - 如何使用 GCC 编译 Objective-C 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14409078/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com