我在编译以下程序时遇到问题。我正在使用“gcc -framework Foundation inherit8.1m”并收到以下错误。我究竟做错了什么?感谢。
ld警告:在inherit8.1m中,文件是 不是必需的架构未定义 符号:“_ main”,引自: 从crt1.10.5.o ld开始:未找到符号collect2:ld 返回1退出状态
// Simple example to illustrate inheritance
#import <Foundation/Foundation.h>
// ClassA declaration and definition
@interface ClassA: NSObject
{
int x;
}
-(void) initVar;
@end
@implementation ClassA
-(void) initVar
{
x = 100;
}
@end
// Class B declaration and definition
@interface ClassB : ClassA
-(void) printVar;
@end
@implementation ClassB
-(void) printVar
{
NSLog (@"x = %i", x);
}
@end
int main (int argc, char *argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
ClassB *b = [[ClassB alloc] init];
[b initVar]; // will use inherited method
[b printVar]; // reveal value of x;
[b release];
[pool drain];
return 0;
}
答案 0 :(得分:4)
尝试将源文件重命名为仅以.m结尾的内容。您的文件扩展名为.1m,这似乎会混淆编译器。
答案 1 :(得分:1)
您错误地命名了自己的文件。它应该是inherit8.m,而不是inherit8。 1 m。
答案 2 :(得分:1)
我发现在linux上使用GNUmakefile更容易(不确定这是否是你的情况)。
我有一个从LogTest
编译的命令行工具source.m
:
> cat source.m
#import <Foundation/Foundation.h>
int main(void)
{
NSLog(@"Executing");
return 0;
}
> cat GNUmakefile
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = LogTest
LogTest_OBJC_FILES = source.m
include $(GNUSTEP_MAKEFILES)/tool.make
> make
Making all for tool LogTest...
Compiling file source.m ...
Linking tool LogTest ...
> ./obj/LogTest
2009-05-17 20:05:36.032 LogTest[9850] Executing