2009-05-18 13 views
0

Ich habe Probleme beim Kompilieren des folgenden Programms. Ich verwende "gcc -framework Foundation inherit8.1m" und erhalte die folgenden Fehler. Was mache ich falsch? Vielen Dank.Kompilieren eines Objective-C-Programms

ld Warnung: in inherit8.1m, Datei ist nicht erforderlich Architektur undefiniert Symbole: "_main", verwiesen von: Start in crt1.10.5.o ld: Symbol (e) nicht gefunden collect2: ld ergab 1 Exit-Status

// 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

Auch wenn du bist Frage aswered worden ist, diese Frage zu sehen komisch. Ich lese gerade das gleiche Segment von Kochans Buch durch. Tolles Buch, nicht wahr? Warum benutzt du nicht einfach xcode? –

+0

Ich hatte es eilig, Objective-C zu lernen und hatte Zugriff auf eine Mac-Shell. (aber kein Zugang zu einer physischen Maschine) XCode ist viel bequemer. – Stu

Antwort

4

Versuchen Sie, Ihre Quelldatei etwas umbenennen, die in nur .m endet. Ihre Datei hat eine Erweiterung von .1m, die den Compiler zu verwechseln scheint.

+0

Whoops, ich wollte die Datei "inherit8.1.m" nennen. Vielen Dank. – Stu

1

Sie haben Ihre Datei falsch benannt. Es sollte erben8.m sein, nicht erben8. m.

1

Ich fand es einfacher, GNUmakefile unter Linux zu verwenden (nicht sicher, ob das der Fall ist). Ich habe ein Kommandozeilen-Tool LogTest von source.m zusammengestellt:

> 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 
Verwandte Themen