编译Objective-C程序

时间:2009-05-18 00:43:14

标签: objective-c

我在编译以下程序时遇到问题。我正在使用“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;
}

3 个答案:

答案 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
相关问题